我有一个关于我的mysql数据库的一个sql语句的问题。我有一个包含以下列的表: -
sender_id | receiver_id | content | dateAndTime
如您所知,我希望在用户之间实现发送消息。我想为每个用户选择最后一条消息(无论是发送还是接收)。像Facebook中的消息。我想如果可能的话我应该在group by中使用表达式但是我想看看你的意见我应该怎么做。谢谢!
答案 0 :(得分:0)
出于这种目的,您的字段dateAndTime
必须是日期时间类型。
SELECT * FROM TABLE ORDER BY dateAndTime DESC
您可以使用此降序检索最新数据。
答案 1 :(得分:0)
试试这个
SELECT C.ID, T.content, T.dateAndTime FROM T JOIN
(
SELECT ID, MAX(dateAndTime) 'last' FROM
(
SELECT sender_id 'ID', content, dateAndTime FROM T
UNION
SELECT receiver_id 'ID', content, dateAndTime FROM T
) B
GROUP BY ID
) C
WHERE T.dateAndTime = C.last AND (T.sender_id = C.ID OR T.receiver_id = C.ID)
答案 2 :(得分:-1)
假设您有一个'用户'表,并且您所说的表名为'mytable',您可以:
select users.id,mytable.content, MAX(mytable.dateAndTime) as date
from users join mytable
on users.id = mytable.sender_id
or users.id = mytable.receiver_id
group by users.id, mytable.content, date
max函数将仅保留组生成的每个组的最新日期
编辑:试试这个
select users.id, mytable.content, mytable.dateAndTime
from users join mytable
on users.id = mytable.sender_id
or users.id = mytable.receiver_id
where mytable.dateAndTime = (select max(t.dateAndTime) from mytable as t where t.receiver_id = users.id or t.sender_id = users.id)