按更多组合分组

时间:2015-04-11 14:51:28

标签: php mysql group-by

我有下表来表示用户之间的对话。

message | user1 | user2 | unixtime
msg1    | 14    | 21    | -
msg2    | 21    | 12    | -
msg1    | 14    | 18    | -
msg3    | 14    | 21    | -
msg2    | 18    | 14    | -
msg4    | 21    | 12    | -

我想通过选择current_user = user1或user2的所有消息来显示特定用户的会话列表。 到目前为止,这个SELECT将选择正确的消息,但分组无法正常工作。

SELECT * FROM (
    SELECT * FROM messages
    WHERE user1 = '".$_SESSION['login']['ID']."'
    OR user2 = '".$_SESSION['login']['ID']."'
    ORDER BY unixtime DESC
) as list
GROUP BY user1, user2
ORDER BY unixtime DESC

它只会使用相同的user1和user2对消息进行分组,如果两个用户被反转,则不会。 这是由更高级的分组完成还是我应该以某种方式加入该表?

1 个答案:

答案 0 :(得分:2)

目前还不清楚您希望查询执行什么操作,因为您使用的是group byselect *select *从匹配的行返回不确定的值。我不知道为什么有人会这样做。您可以在documentation

中了解相关信息

如果您想对消息进行计数:

SELECT least(user1, user2), greatest(user1, user2), count(*)
FROM messages
WHERE '".$_SESSION['login']['ID']."' in (user1, user2)
GROUP BY least(user1, user2), greatest(user1, user2)