【问题标题】:Use OrderBy doesnt work CodeIgniter Doctrine QueryBuilder使用 OrderBy 不起作用 CodeIgniter Doctrine QueryBuilder
【发布时间】:2020-07-29 14:43:08
【问题描述】:

早上好,

我有这个功能可以按“最贵”和“最便宜”来订购我的产品,它工作正常,但问题是,我有一些没有图像的产品,我希望它们被移到最后一页,当我执行以下操作:

              ->addOrderBy('u.status','desc')
              ->addOrderBy('u.imagem', 'DESC')
              ->addOrderBy($order,$for)
              ->getQuery()

他将没有图片的产品移到最后一页,但我的 OrderBy 无法按最贵和最便宜的方式订购。

当`

            ->addOrderBy('u.status','desc')
            ->addOrderBy($order,$for)
            ->addOrderBy('u.imagem', 'DESC')
            ->getQuery()

工作正常,但图像继续随机。

【问题讨论】:

  • 当产品没有图片时,u.imagem 字段的值是多少?表格中u.imagem 的字段类型是什么?
  • 类型为字符串,无图片时为NULL。
  • 我为你写了一个答案。希望对你有帮助
  • 感谢您的回答,但不起作用。当我尝试第二个选项(我需要的那个)时,他实际上订购了正确的图像,最后的图像,但是我的第一个 OrderBy($order, $for) 没有像它应该的那样工作,就像他覆盖了第一个 orderBy .

标签: codeigniter doctrine sql-order-by query-builder


【解决方案1】:

由于产品没有图片时u.imagem字段为空,您可以:

1.- 如果您想从结果中禁止没有图像的产品:

u.imagem IS NOT NULL 添加where 子句,您将只返回包含图像的结果。

2.- 如果您想要/需要的只是在列表中保留没有图片但最后的产品,您可以:

        ->addOrderBy('u.status','desc')
        ->addOrderBy($order,$for)
        ->addOrderBy('u.imagem IS NULL', 'ASC')
        ->getQuery()

上述方法有效,因为IS NULL 在 false 时返回 0,在 true 时返回 1。通过按升序对这些 1 和 0 进行排序,您将首先得到所有不满足 IS NULL 的(即实际有图像的),然后是其他的

【讨论】:

  • 感谢您的回答,但不起作用。当我尝试第二个选项(我需要的那个)时,他实际上订购了正确的图像,最后的图像,但是我的第一个 OrderBy($order, $for) 没有像它应该的那样工作,就像他覆盖了第一个 orderBy .
猜你喜欢
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 2017-02-25
相关资源
最近更新 更多