Sql 如何在cakephp中从数据库中查找不同的值
我正在实现一个类似Facebook的消息系统。在预览中,我想显示发件人发送给特定收件人的最后一封邮件。我现在遇到的问题是,我当前的代码从数据库中获取所有消息给收件人。 我现在的代码是Sql 如何在cakephp中从数据库中查找不同的值,sql,cakephp,Sql,Cakephp,我正在实现一个类似Facebook的消息系统。在预览中,我想显示发件人发送给特定收件人的最后一封邮件。我现在遇到的问题是,我当前的代码从数据库中获取所有消息给收件人。 我现在的代码是 $messages = $this->Message->find('all', array( 'conditions' => array('recipient_id' => $recipient_id), 'order' => array('Message.id' =&
$messages = $this->Message->find('all',
array(
'conditions' => array('recipient_id' => $recipient_id),
'order' => array('Message.id' => 'desc'),
'fields' => array('DISTINCT Message.sender_id','Message.message')
)
);
如果我像这样使用它,它确实有效
$messages = $this->Message->find('all',
array(
'conditions' => array('recipient_id' => $recipient_id),
'order' => array('Message.id' => 'desc'),
'fields' => array('DISTINCT Message.sender_id')
)
);
但在这种情况下,我不会得到与唯一发件人关联的最后一条消息
我在谷歌上做了很多研究,没有发现任何有用的东西。有可能吗?一切帮助都将不胜感激。谢谢。我建议尝试按条款分组:
$messages = $this->Message->find('all',
array(
'conditions' => array(
'recipient_id' => $recipient_id,
),
'order' => array(
'Message.id' => 'DESC'
),
'group' => array('Message.sender_id')
)
);
GROUP BY将根据提供答案的发送者id对可能的结果进行分组。这类问题经常被问到,MySQL(或其他一些数据库标签)是每组前N个问题的一部分 假设您的messages表中有这些字段
- 身份证
- 发送者身份证
- 收件人id
- 发送日期
- 信息文本
SELECT Message.*
FROM messages AS Message
JOIN (SELECT sender_id, MAX(sent_date) AS recent_date
FROM messages
WHERE recipient_id = 1
GROUP BY sender_id) AS most_recent
ON most_recent.sender_id = Message.sender_id
AND most_recent.recent_date = Message.sent_date
WHERE Message.recipient_id = 1;
这不容易转化为CakePHP的
find
方法。改为使用。添加第二个条件(发送方id)如何,而不是find('all'find('first'带有'order'=>数组('timestamp'=>'DESC'),