php Mysql 将用户消息分组和排序在一起

标签 php mysql sql-order-by grouping

PHP Mysql 表:消息

id   sender   receiver      time_sent          Message  SendDel RecDel
1     1          3      2011-08-17 14:00:00     [text]     0      0
2     3          1      2011-08-17 15:00:00     [text]     0      0
3     2          4      2011-08-18 14:19:28     [text]     1      0
4     4          2      2011-08-18 15:19:28     [text]     0      0

目标是检索最高值(value)的消息 (MAX) 并根据发送者、接收者对消息进行分组。所以消息 id 的 1 和 2 会组合在一起,id 的 3 和 4 会组合在一起。

例子:登录userid = 2应该返回

id   sender   receiver      time_sent          Message  SendDel RecDel
4     4          2      2011-08-18 15:19:28     [text]     0      0

我不确定为什么,但我的查询没有将所有消息组合在一起。这是我的查询:

SELECT id, sender, receiver, MAX(time_sent), MAX(message) 
FROM Messages
WHERE sender='$userid' OR receiver = '$userid' 
Group By sender,receiver 
Order BY time_sent DESC

任何解决方案?

最佳答案

你想要:

So message id's 1 and 2 would group together and id's 3 and 4 would group together.

您必须在 group by 子句中施展魔法才能做到这一点。

SELECT id, sender, receiver, MAX(time_sent), MAX(message) 
FROM Messages
WHERE sender='$userid' OR receiver = '$userid' 
Group By (if(sender > receiver,  sender, receiver))
       , (if(sender > receiver,  receiver, sender))
Order BY time_sent DESC

关于php Mysql 将用户消息分组和排序在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7408662/

相关文章:

mysql - 使用 Django ORM + MySQL/InnoDB 捕捉竞争条件的正确方法

php - 在php中序列化匿名函数

php - 我如何在 php 中复数?

SQL 计算不同的总行数?

小数字段的Mysql更新语句为NULL或为空

php - MySQL 选择分组依据和排序依据

MySQL - 使用 GROUP BY 和 DESC

php - 多个连接上的 orderby 语句

php - 在javascript中获取当前脚本执行文件名

即使我已经指定了使用类,也找不到 PHP 命名空间和使用 fatal error 类