Php Yii:如何使用CDbCriteria在GROUP BY之前订购?
对于这样的查询:Php Yii:如何使用CDbCriteria在GROUP BY之前订购?,php,mysql,group-by,yii,sql-order-by,Php,Mysql,Group By,Yii,Sql Order By,对于这样的查询: SELECT * FROM ( SELECT * FROM message ORDER BY added_on DESC ) as m WHERE receiver_id = 2 GROUP BY sender_id ORDER BY priority_id DESC; 我知道如何使用findAllBySql: $this->findAllBySql( 'SELECT * FROM ( SELECT * FROM message ORDE
SELECT * FROM (
SELECT * FROM message ORDER BY added_on DESC
) as m WHERE receiver_id = 2 GROUP BY sender_id ORDER BY priority_id DESC;
我知道如何使用findAllBySql
:
$this->findAllBySql(
'SELECT * FROM (
SELECT * FROM message ORDER BY added_on DESC
) as m WHERE receiver_id = :receiverId
GROUP BY sender_id
ORDER BY priority_id DESC',
array('receiverId' => $userId));
但我想知道是否有任何方法可以使用,因为下面的代码当然不起作用:
$criteria = new CDbCriteria();
$criteria->condition = 'receiver_id = :receiverId';
$criteria->group = 'sender_id';
$criteria->order = 'priority_id DESC, added_on DESC';
$criteria->params = array('receiverId' => $userId);
谢谢。如果您有一个相当复杂的SQL查询,最好将其保存在SQL中,而不是将其写入活动记录中。是的,它限制了数据库的可移植性,但您可能没有一个tun的这些查询,更简单和更可维护的代码总是胜出。我知道这太晚了。我也有类似的问题,我试着这样做
$criteria = new CDbCriteria();
$criteria->select = '*, MAX(added_on) max_added_on';
$criteria->condition = 'receiver_id = :receiverId';
$criteria->group = 'sender_id';
$criteria->order = 'priority_id DESC, max_added_on DESC';
$criteria->params = array('receiverId' => $userId);
它解决了我的问题。如果您想在模型类中检索max_added_,只需在模型类中添加另一个属性。这有帮助吗?有趣的是,使用CDbCriteria阅读该链接看起来是不可能的。谢谢因此,看起来使用CDBC标准是不可能的,这是唯一的答案,我接受它。谢谢。FWs,尤其是Yii(我在公司里和它一起工作)有很多令人不舒服的不可能的事情,比如模型有bug,Yii中的会话,不能在关联多维数组中保存值。这就是为什么我也提出了一点,问题不是什么是非常复杂的sql查询的最佳实践。