我正在使用下面的查询来获取receiver_id的唯一结果,但也试图获得仅返回最高的id而不是最低的id,这是查找以下查询生成的内容。有没有办法我们可以更改find可选参数以获得仅返回的最高ID?
$this->loadModel('Chat');
$lastChat = $this->Chat->find('all', array(
'conditions' => array(
'Chat.user_id' => $user_id['User']['id']
),
'order' => array('Chat.id DESC'),
'fields' => array(
'Chat.id',
'Chat.chat',
'Chat.user_id',
'Chat.receiver_id',
'Chat.read',
'Chat.created'
),
'group' => array('Chat.receiver_id')
));
答案 0 :(得分:2)
我想说如果要在GROUP BY
子句中使用聚合函数,只在SQL中使用SELECT
子句是有意义的。
也许我不理解你问题的性质,但这个查询对你有用吗?
SELECT Chat.receiver_id, MAX(Chat.id)
FROM chats Chat
WHERE Chat.id = X
GROUP BY Chat.receiver_id
如果是这种情况,您只需要在fields
数组中添加额外的元素:
$this->Chat->find('all', array(
'conditions' => ...,
'order' => ...,
'fields' => array(..., 'MAX(Chat.id) as max_id',...),
'group' => ...,
);
答案 1 :(得分:1)
这是实现目标的一种方式。
$this->loadModel('Chat');
$lastChat = $this->Chat->find('all', array(
'conditions' => array(
'Chat.user_id' => $user_id['User']['id']
),
'order' => array('Chat.id DESC'),
'fields' => array(
'Chat.id',
'Chat.chat',
'Chat.user_id',
'Chat.receiver_id',
'Chat.read',
'Chat.created'
),
'order' => array('Chat.receiver_id DESC'),
'limit' => 1
));
无需使用GROUP BY
。只需使用ORDER BY
和LIMIT
即可。