原则 2 查询生成器 abs 函数

发布于 2024-12-06 08:15:39 字数 772 浏览 0 评论 0原文

这项工作:

    $qb = $this->em->createQueryBuilder();

    $qb->select("abs(u.code) as code")
       ->from("User", "u")
       ->orderBy("code","ASC")
       ->getQuery()
       ->getArrayResult();

这不起作用:

    $qb = $this->em->createQueryBuilder();

    $qb->select("u.code")
       ->from("User", "u")
       ->orderBy("abs(u.code)","ASC")
       ->getQuery()
       ->getArrayResult();

错误:

语法错误]第 0 行,第 118 列:错误:预期字符串结尾,得到 '('

本机教义函数 abs 仅适用于选定部分的声明和 不要按部分顺序工作。

观察:

1-) 我避免使用 NativeQuery。

2-) u.code 是 mysql 上的 varchar 字段,需要是 varchar(有时是数字,有时是字符串),然后我需要像数字大小写的数字一样进行排序。

有帮助吗?

This Work:

    $qb = $this->em->createQueryBuilder();

    $qb->select("abs(u.code) as code")
       ->from("User", "u")
       ->orderBy("code","ASC")
       ->getQuery()
       ->getArrayResult();

This Don't Work:

    $qb = $this->em->createQueryBuilder();

    $qb->select("u.code")
       ->from("User", "u")
       ->orderBy("abs(u.code)","ASC")
       ->getQuery()
       ->getArrayResult();

The Error:

Syntax Error] line 0, col 118: Error: Expected end of string, got '('

The native doctrine function abs work only on a select part of statment and
don't work on order by part.

Obs:

1-) Im avoiding to use NativeQuery.

2-) u.code is a varchar fild on mysql and need to be varchar ( some times numeric and some times string), and i need to order then like a number in numeric case.

Any Help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

救星 2024-12-13 08:15:39

解决了 atma 谢谢的 abs() 确实不能直接在 orderBy 中工作,而是作为别名。

解决方案

SELECT field1,field2,abs(field3) AS abs_field3 
FROM table 
ORDER BY abs_field3 ASC

Obs:这是一个理论限制,而不是mysql限制,mysql支持abs直接按部分排序。

Solved atma thank's abs() realy doesn't work directly in orderBy but as an alias.

soluction

SELECT field1,field2,abs(field3) AS abs_field3 
FROM table 
ORDER BY abs_field3 ASC

Obs: It's a doctrine limitation, not a mysql limitation, mysql suports abs direct on order by part.

傲性难收 2024-12-13 08:15:39

7 年不活动后可能有点晚了,但也许它对某人有帮助。

在这里找到解决方案:
Doctine< /a>

$qb = $this->em->createQueryBuilder();

$qb->select("u.code")
   ->from("User", "u")
   ->orderBy(
       $qb->expr()->andX(
           $qb->expr()->abs('u.code'), "ASC"
       )
   )
   ->getQuery()
   ->getArrayResult()
;

may be a little late after 7 years Inactivity, but maybe it helps somebody.

Solution found here:
Doctine

$qb = $this->em->createQueryBuilder();

$qb->select("u.code")
   ->from("User", "u")
   ->orderBy(
       $qb->expr()->andX(
           $qb->expr()->abs('u.code'), "ASC"
       )
   )
   ->getQuery()
   ->getArrayResult()
;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文