像这样的查询:
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));
但我想知道是否有任何方法可以使用 CDbCriteria 来做到这一点导致以下代码当然不起作用:
$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);
谢谢。
最佳答案
我知道为时已晚。我有类似的问题,我尝试这样处理
$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_on,你只需要在模型类上添加另一个属性。
关于php - Yii:如何使用 CDbCriteria 在 GROUP BY 之前进行 ORDER BY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9939275/