【问题标题】:Doctrine Order by id=1Doctrine Order by id=1
【发布时间】:2014-02-03 15:10:37
【问题描述】:

我想获取列表用户并且当前用户每次都必须是第一个。 在 MySql 中,我可以制作为:

SELECT * FROM `user` ORDER BY id = 2 DESC

在 Doctrine 中,我尝试做类似:

 $query = $this->_em->createQuery("SELECT bul, u, c FROM 'Building\Entity\BuildingUserLink' bul JOIN bul.building b JOIN bul.company c JOIN bul.user u WHERE b = :building_id ORDER BY u.id = :current_id DESC");
 $query->setParameters(array('building_id' => $building_id, 'current_id' => $current_id));
 return $query->getResult();

但我得到错误 - “预期的字符串结尾,得到 \u0027=\u0027\”

我的错是什么?

PS我用的是ZF2+DOctrine

【问题讨论】:

    标签: php mysql zend-framework doctrine-orm sql-order-by


    【解决方案1】:
    SELECT * FROM `user` ORDER BY id = 2 DESC, id DESC
    

    在您的实际查询中:

    ORDER BY u.id = :current_id DESC, u.id DESC
    

    【讨论】:

    • 它对我不起作用。我又遇到了错误:错误:预期的字符串结尾,得到'='\n#0 /host/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(448):.....
    【解决方案2】:

    这可以使用 MySQL 中的 FIELD 函数来完成。可以使用https://github.com/beberlei/DoctrineExtensions 将对 FIELD 功能的支持添加到学说中。

    查询将是:

    SELECT * FROM `user` ORDER BY FIELD(id, 2) DESC
    

    【讨论】:

      猜你喜欢
      • 2020-05-22
      • 2015-02-26
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 2014-09-06
      相关资源
      最近更新 更多