php - 拉取消息线程如何从数据库中列出数据?

标签 php mysql database

这是我的 MySQL 数据库结构:

收件人(id、converstation_id、user_id)

对话(id,user_start)

消息(id, user_id, message, conversation_id, time)

我想做的是提取由特定用户发起的所有对话ID,他是其中一个对话的接收者。并按最后一条消息排序。

我该怎么做?

最佳答案

以下查询将起作用。您必须将 REQUESTED_USER_ID 替换为有效的用户 ID。请注意 SQL 中的 UNION 语句,它连接了两个子查询的结果。然后将 UNION 的结果包装在另一个 SELECT 中,以按开始时间实现排序。

SELECT
  conversation_id
FROM (
  SELECT 
    c.id AS conversation_id,
    m.time AS start
  FROM Conversations c
  JOIN Messages m ON m.conversation_id = c.id
  WHERE c.user_start = REQUESTED_USER_ID
  UNION
  SELECT
    c.id AS conversation_id,
    m.time AS start
  FROM Conversations c
  JOIN Recipents r ON c.id = r.user_id
  JOIN Messages m ON m.conversation_id = c.id
  WHERE r.user_id = REQUESTED_USER_ID
) result

ORDER BY start DESC;

关于php - 拉取消息线程如何从数据库中列出数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14225521/

相关文章:

php - .htaccess RewriteEngine 破坏 CSS/图像

mysql - 导入和覆盖 MySQL 中的现有数据

mysql - 使用 REGEXP (MySql) 在单词边界内查询以字符串开头/结尾的记录

mysql - 修改我的网站以允许匿名评论

PHPUnit:如何测试方法的调用顺序不正确?

PHP if 语句在 echo 中创建 HTML 选项列表

mysql - 是否可以在列大小不匹配的情况下创建外键

sql - 跨多个表的参照完整性

.net - ADO.NET:DataSet 或 DataTable 以及如何检索数据

php - 如何在 Android 中 Facebook 登录后将 Facebook 详细信息插入数据库