Php SQL:显示来自数据库的最后消息

Php SQL:显示来自数据库的最后消息,php,mysql,sql,database,Php,Mysql,Sql,Database,我对SQL查询有问题。(对不起,我的英语太差了) 我正在为一个网站开发一个私人消息系统,我有如下数据库: 线程 | ID | TITLE | | ID | ID_THREAD | ID_USER | | ID | TITLE | | #1 | Me and Marta | | #2 | Marta and John | | #3 | Me and John | | #4 | Me, Marta and John | | ID | ID_

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

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

线程

| ID | TITLE | | ID | ID_THREAD | ID_USER | | ID | TITLE | | #1 | Me and Marta | | #2 | Marta and John | | #3 | Me and John | | #4 | Me, Marta and John | | ID | ID_THREAD | ID_USER | | 1 | #1 | Alex | | 2 | #1 | Marta | | 3 | #2 | Marta | | 4 | #2 | John | | 5 | #3 | Alex | | 6 | #3 | John | | 7 | #4 | Alex | | 8 | #4 | Marta | | 9 | #4 | John | |ID |标题| 用户线程

| ID | TITLE | | ID | ID_THREAD | ID_USER | | ID | TITLE | | #1 | Me and Marta | | #2 | Marta and John | | #3 | Me and John | | #4 | Me, Marta and John | | ID | ID_THREAD | ID_USER | | 1 | #1 | Alex | | 2 | #1 | Marta | | 3 | #2 | Marta | | 4 | #2 | John | | 5 | #3 | Alex | | 6 | #3 | John | | 7 | #4 | Alex | | 8 | #4 | Marta | | 9 | #4 | John | |ID | ID |线程| ID |用户| 消息

| ID | ID_THREAD | ID_USER | MESSAGE | TIMESTAMP | | ID | ID_THREAD | ID_USER | MESSAGE | TIMESTAMP | | 1 | #1 | Alex | Lorem ipsum | 21:35:45 | | 2 | #2 | Marta | Alex can't see this message | 21:35:58 | | 3 | #3 | John | Hello. | 21:36:10 | | 4 | #1 | Marta | Demo. | 21:36:35 | | 5 | #4 | John | I like blue | 21:36:47 | |ID | ID |线程| ID |用户|消息|时间戳| 在线程中有一个线程列表

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

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

我想显示user@Alex签名的所有线程,按其最后的消息排序

示例

线程

| ID | TITLE | | ID | ID_THREAD | ID_USER | | ID | TITLE | | #1 | Me and Marta | | #2 | Marta and John | | #3 | Me and John | | #4 | Me, Marta and John | | ID | ID_THREAD | ID_USER | | 1 | #1 | Alex | | 2 | #1 | Marta | | 3 | #2 | Marta | | 4 | #2 | John | | 5 | #3 | Alex | | 6 | #3 | John | | 7 | #4 | Alex | | 8 | #4 | Marta | | 9 | #4 | John | |ID |标题| |#1 |我和玛尔塔| |#2 |玛尔塔和约翰| |我和约翰| |我、玛尔塔和约翰| 用户线程

| ID | TITLE | | ID | ID_THREAD | ID_USER | | ID | TITLE | | #1 | Me and Marta | | #2 | Marta and John | | #3 | Me and John | | #4 | Me, Marta and John | | ID | ID_THREAD | ID_USER | | 1 | #1 | Alex | | 2 | #1 | Marta | | 3 | #2 | Marta | | 4 | #2 | John | | 5 | #3 | Alex | | 6 | #3 | John | | 7 | #4 | Alex | | 8 | #4 | Marta | | 9 | #4 | John | |ID | ID |线程| ID |用户| |亚历克斯| |2 |#1 |玛尔塔| |3 |#2 |玛尔塔| |约翰| |5 | 3 |亚历克斯| |约翰| |亚历克斯| |玛尔塔| |约翰| @消息

| ID | ID_THREAD | ID_USER | MESSAGE | TIMESTAMP | | ID | ID_THREAD | ID_USER | MESSAGE | TIMESTAMP | | 1 | #1 | Alex | Lorem ipsum | 21:35:45 | | 2 | #2 | Marta | Alex can't see this message | 21:35:58 | | 3 | #3 | John | Hello. | 21:36:10 | | 4 | #1 | Marta | Demo. | 21:36:35 | | 5 | #4 | John | I like blue | 21:36:47 | |ID | ID |线程| ID |用户|消息|时间戳| |1 | | 1 |亚历克斯|洛雷姆·伊普苏姆| 21:35:45| |2 | | 2 |玛尔塔|亚历克斯看不到此消息| 21:35:58| |约翰你好21:36:10 | |4 |#1 |玛尔塔|演示21:36:35 | |5 | 4 |约翰|我喜欢蓝色| 21:36:47| 结果 你好,玛尔塔,您已登录:(按收到的最后一条消息排序)

  • 我、玛尔塔和约翰(21:36:47)

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

  • 我和玛尔塔(21:36:10)


您可以这样尝试:-

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:

您可以这样尝试:-

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:

尝试此

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#U用户的值尝试此

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

将ID#USER的值传递给USER#2

感谢您的回复,但它会在“where子句”中返回
“未知列'USER#x_thread.ID_USER'”
::如何解决此问题?问题已解决,但仍然不起作用。。我已经更新了第一篇帖子,通过这个查询,输出是“Friends,Untitled,Friends,Random”,但应该是“Friends,Random,Untitled”:/----我试图从Groupby中删除“MS.MESSAGE,MS.TIMESTAMP”,结果是“Untitled”,“Friends”,“Random”。好的,我再次编辑了第一篇帖子(对不起),现在更简单了。查询的结果是:#4、#1、#3、#1。如果我们删除最后一个“1,这很完美:感谢回复,但它在“where子句”中返回
“未知列'user\u x\u thread.id\u user'”
::我如何解决这个问题?问题已经解决,但仍然不起作用。。我已经更新了第一篇帖子,通过这个查询,输出是“Friends,Untitled,Friends,Random”,但应该是“Friends,Random,Untitled”:/----我试图从Groupby中删除“MS.MESSAGE,MS.TIMESTAMP”,结果是“Untitled”,“Friends”,“Random”。好的,我再次编辑了第一篇帖子(对不起),现在更简单了。查询的结果是:#4、#1、#3、#1。如果我们删除最后一个#1,它就完美了:您使用的是哪些DBMS?博士后?Oracle?我使用MySQL和PDO功能您使用的是哪种DBMS?博士后?Oracle?我使用MySQL和PDO函数