按用户分组mysql结果

时间:2013-12-03 08:50:20

标签: php mysql join group-by

我想创建一个页面,列出当前用户发送的所有消息,以及其他成员发送给当前用户的所有消息,按用户对结果进行分组并显示他们的上一条消息(类似于短信列表):

Mysql表:

users table:
    id,name,password
messages table: 
    id,messageSentedBy,messageSentedTo,messageData

我尝试过的查询(返回重复的消息):

select
    users.*,messages.*
from
    messages
left join users on user.name=messages.messageSentedBy
    or user.name=messages.messageSentedTo
where
    messages.messageSentedBy = current user name or
    messages.messageSentedTo = current user name

1 个答案:

答案 0 :(得分:0)

我想你想要这个

select m.*
from messages m
where 
    (m.sentBy = current user id
     or m.sentTo = current user id)
and not exists (
select 1 
    from messages m2 
    where m2.id > m.id 
    and m2.sentBy = m.sentBy 
    and m2.sentTo=m.sentTo))
order by user.name

这假设消息id是对最新消息的度量(具有带时间戳的列会更好)。

考虑将user.id用作外键而不是user.name。