我在mysql中有消息表。 列被命名为发件人,收件人,文本,ID,日期。
像这样查询:
SELECT max(id), text
FROM `messages`
WHERE reciever = $user_id OR sender = $user_id
GROUP BY reciever, sender
ORDER BY date DESC
它按发件人(或收件人)对邮件进行分组,并返回最后一条消息ID max(id),但不会返回上一条消息文本。
如果没有JOIN和UNION,有没有办法解决这个问题?
非常感谢!
答案 0 :(得分:3)
您可以按照以下方式执行此操作:
SELECT * FROM messages
WHERE id IN
(
SELECT MAX(id) FROM messages
WHERE reciever = $user_id OR sender = $user_id
GROUP BY reciever, sender
)
ORDER BY date DESC
答案 1 :(得分:1)
分组操作只能与聚合操作(如总和,平均值和计数)配合使用。 使用其他属性是没有意义的。
想象一下,你有两个具有相同reiceiver的元组,你期望分组文本是什么?这没有任何意义。
根据我对你的目标的猜测,@ danishgoel的回答可能就是你想要的,如果我已经猜到了。
答案 2 :(得分:0)
选择$ user_id的最后一条消息:
SELECT id, text FROM `messages`
WHERE `reciever` = $user_id OR `sender` = $user_id
ORDER BY `id` DESC
LIMIT 1