php - 按更多组合分组

标签 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 的消息分组,如果两个用户颠倒则不会。 这是通过更高级的分组完成的还是我应该以某种方式加入表?

最佳答案

不清楚您希望查询执行什么操作,因为您正在使用 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)

关于php - 按更多组合分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29579218/

相关文章:

mysql - MySql触发器中的以下if语句有什么问题

MySQL:如果id在其他表中不存在,则删除行

sql - group by子句未产生预期的总和

php - 使用条件从 Php 数组中提取

php - 从数据库获取描述时模式不匹配

数据库 |如何只选择每个类别的一条记录?

ruby - group_by in rails by 2个或更多属性

MySQL-在两个 group_by 之后尝试两列的 sum()

php - 将 PHP 数组转换为 Key => Value 数组

php - MySQL 结果作为变量