php - 通过用户 ID 选择对话的 SQL 请求

标签 php mysql sql

我有 4 张 table :

  1. 对话
  2. conversations_users
  3. 消息
  4. 用户

对话结构表是:

  • id(主键)
  • 标题(对话标题)

conversations_users结构表是:

  • id(主键)
  • conversationID(用户所在的对话 ID)
  • userID(与对话 ID 关联的用户)

消息结构表是:

  • id(主键)
  • 消息(消息文本)
  • conversationID(消息所在的对话 ID)
  • senderID(发送消息的用户 ID)
  • 日期(消息的时间戳)

用户结构表是:

  • id(主键)
  • 用户名

我想显示用户的所有对话(标题、最后一条消息和最后一条消息时间戳),因此仅显示用户所在的对话。

如何处理 SQL 请求?我想它会是这样的:

SELECT c.title, m.message, m.date 
FROM conversation c
INNER JOIN conversation_users cu
ON ...
INNER JOIN messages m
ON ...
INNER JOIN users u
ON ...
GROUP BY u.id

最佳答案

select usr.userID,
       cvs.title,
       msg.message,
       times.date 
from conversations_users usr
left join conversations cvs on usr.conversationID = cvs.id
left join messages msg on usr.conversationID = msg.conversationID
left join 
    (select usr.userID,
       MAX(msg.date) as date 
    from conversations_users usr
    left join messages msg on usr.conversationID = msg.conversationID
    group by usr.userID) times on times.userID= usr.userID and times.date=msg.date

关于php - 通过用户 ID 选择对话的 SQL 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34913828/

相关文章:

PHP XML 错误 - 文档末尾有多余内容

php - WordPress 自定义下拉菜单

mysql - 在 MySQL 中不区分大小写地排序字符串

sql - 像命令不工作 Oracle SQL

使用 CTE 的 SQL Server 2008 动态查询

php - 如何检测 URL 中特定页面的存在?

php - 具有多个角色的 Laravel 中间件

mysql - 显示两个表中的数据,但第二个表的数据比第一个表多

mysql - 在 MySQL 中,我应该引用数字吗?

mysql - 更新/插入记录 - ON DUPLICATE KEY UPDATE - 不更新记录