php - MySql SQL 查询 Group by 和 Order by

标签 php mysql sql

我在 mysql 中有一个表。哪个结构是:

id   sender   receiver        time              message
-------------------------------------------------------
1     23         34      2014-11-02 14:55:02      1
2     22         34      2014-11-02 16:55:02      2
3     21         35      2014-11-02 16:55:02      5
4     23         34      2014-11-02 16:55:02      2
5     22         35      2014-11-02 16:55:02      1

现在我需要进行一个查询,如果通信不止一个,则将从特定发送者获取特定接收者的最新消息。否则它给出单行。在这里,我想使用接收器 id = 34 进行查询,它应该给我第 4 行和第 2 行。即

2     22         34      2014-11-02 16:55:02      2
4     23         34      2014-11-02 16:55:02      2

这里我不是要求数据库中的特定行数。这是一个对话数据库。我想要用户的对话列表。当同一发送者和接收者有不止一行时,我想要最新的对话。

如何做到这一点?

最佳答案

您可以使用group by获取最新消息时间,然后在子查询中使用它来获取所有消息详细信息

 Select * from
 table1 T
 Join(
      Select sender ,max(time) as lastTime
      From table1
      Where receiver = 34
     Group by sender) T2
 On T.sender = T2.sender
 and T.time = T2.lastTime 
 And T.receiver = 34

关于php - MySql SQL 查询 Group by 和 Order by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27081077/

相关文章:

java - 使用 Hibernate 将 csv 文件导入 MySQL 数据库

php - MySQL SUBSTR() 函数

php - 解析这个 HTML

MySQL 根据优先级逻辑选择唯一记录

java - 使用 JdbcTemplate 插入多行

php - 如何在 Yii Migrations 中保存 sql 语句的返回值

javascript - 验证计算时 DRY 在服务器 (PHP) 上进行客户端 (Javascript)

php - IIS - Mysql 性能问题

php - Symfony2 : Cache a "Class Loader" with OpCache

java - 根据列条目类型对值进行排名