我需要从每个“用户”中找到最新的“消息”并列出它们(如iPhone等对话的收件箱)。
我的消息表中的字段是:
id|to|from|body|timestamp
to =当前用户ID
来自=发件人用户ID
如何构建一个查询,以获取“from”字段唯一的每个不同用户的最新帖子?显然,第一个条件是'to'字段与当前用户ID匹配。
来自不同用户的每封邮件还应将用户详细信息加入
。另外,如果你能够证明这在CakePHP中是如何工作的那将是很棒的......!如果没有,只需SQL执行:)
答案 0 :(得分:1)
您可以将SQL与子查询一起使用,例如:
SELECT
messages.*,
max_stamps.max_stamp
FROM
(SELECT
MAX(timestamp) as max_stamp,
`from`
FROM
messages
WHERE
messages.`to`=$currentUser
GROUP BY
`from`
) as max_stamps
LEFT JOIN
messages
ON messages.`from`=max_stamps.`from`
AND max_stamps.max_stamp=messages.timestamp
-i.e。首先在子查询中选择最大时间戳,然后将它们用于主表。
( update )如果您想获得最大id
值,请在MAX()
中使用它:
SELECT
messages.*,
max_ids.max_id
FROM
(SELECT
MAX(id) as max_id,
`from`
FROM
messages
WHERE
messages.`to`=$currentUser
GROUP BY
`from`
) as max_ids
LEFT JOIN
messages
ON messages.`from`=max_ids.`from`
编辑:误解了id
,from
和to
的含义。提示:使用MySQL保留字命名表/列可能会导致麻烦(至少你必须用反引号括起来)。