【问题标题】:SQL: Show last messages from DBSQL:显示来自数据库的最后一条消息
【发布时间】:2013-09-29 10:41:42
【问题描述】:

我的 SQL 查询有问题。 (对不起,我的英语太差了)

我正在为一个网站开发一个私人消息系统,我有这样的数据库:

线程

|身份证 |标题 |

user_x_thread

|身份证 | ID_THREAD | ID_USER |

消息

|身份证 | ID_THREAD | ID_USER |留言 |时间戳 |

线程中有一个线程列表

user_x_thread 中,每个线程都有一个用户列表。 I.E.在线程 #1 中有用户 #2、#3

最后,在messages中有一个为每个线程发送的消息列表。

我想显示用户@Alex 签名的所有线程,按他们最后的消息排序。

示例

线程

|身份证 |标题 | | #1 |我和玛塔 | | #2 |玛塔和约翰 | | #3 |我和约翰 | | #4 |我,玛尔塔和约翰 |

user_x_thread

|身份证 | ID_THREAD | ID_USER | | 1 | #1 |亚历克斯 | | 2 | #1 |玛塔 | | 3 | #2 |玛塔 | | 4 | #2 |约翰 | | 5 | #3 |亚历克斯 | | 6 | #3 |约翰 | | 7 | #4 |亚历克斯 | | 8 | #4 |玛塔 | | 9 | #4 |约翰 |

@消息

|身份证 | ID_THREAD | ID_USER |留言 |时间戳 | | 1 | #1 |亚历克斯 | Lorem ipsum | 21:35:45 | | 2 | #2 |玛塔 |亚历克斯看不到这条消息 | 21:35:58 | | 3 | #3 |约翰 |你好。 | 21:36:10 | | 4 | #1 |玛塔 |演示。 | 21:36:35 | | 5 | #4 |约翰 |我喜欢蓝色 | 21:36:47 |

结果

嗨,Marta,您已登录:(按收到的最后一条消息排序)

  • [#4] 我、玛尔塔和约翰 (21:36:47)

  • [#1] 我和玛尔塔 (21:36:35)

  • [#3] 我和玛尔塔 (21:36:10)

【问题讨论】:

  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 我使用 MySQL 和 PDO 函数

标签: php mysql sql database


【解决方案1】:

你可以这样尝试:-

SELECT TD.TITLE,MS.MESSAGE,MS.TIMESTAMP from 
THREAD TD
JOIN user_x_thread UXT ON TD.ID=UXT.ID_THREAD
JOIN Messages MS ON MS.ID_THREAD=UXT.ID_THREAD
WHERE UXT.ID=@userid//say 2 or 3 
GROUP BY TD.ID,TD.TITLE,MS.MESSAGE,MS.TIMESTAMP
ORDER BY MS.TIMESTAMP DESC 

@userid 是您登录的用户 ID:

【讨论】:

  • 感谢您的回复,但它返回 "Unknown column 'user_x_thread.id_user' in 'where clause'" :/ 我该如何解决这个问题?
  • 问题解决了,但还是不行。。我更新了第一篇文章,用这个查询,输出是“Friends, Untitled, Friends, Random” 但应该是“Friends , Random, Untitled" :/ ----我尝试从 GROUP BY 中删除 "MS.MESSAGE,MS.TIMESTAMP",结果是 "Untitled", "Friends", "Random"..
  • 好的,我再次编辑了第一篇文章(对不起),现在更简单了。您查询的结果是:#4、#1、#3、#1。如果我们删除最后一个 #1 那就完美了:D
【解决方案2】:

试试这个...

Select * from thread t inner join
user_x_thread ut on t.ID= ut.ID_THREAD inner join
messages m on m.ID_THREAD=ut.ID_THREAD
where ut.ID_USER= user #2
group by t.ID
order by m.ID desc

为用户 #2 传递 ID_USER 的值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    相关资源
    最近更新 更多