SQL:显示来自DB的最后消息

时间:2013-09-29 10:41:43

标签: php mysql sql database

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

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

螺纹

| ID | TITLE |

user_x_thread

| ID | ID_THREAD | ID_USER |

讯息

| ID | ID_THREAD | ID_USER | MESSAGE | TIMESTAMP |

主题中有一个主题列表

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

最后,在消息中,有一个为每个帖子发送的消息列表。

我想显示用户@Alex签名的所有主题,按其上一条消息排序。

示例

螺纹

| ID |        TITLE       |
| #1 |    Me and Marta    |
| #2 |   Marta and John   |
| #3 |     Me and John    |
| #4 | Me, Marta and John |

user_x_thread

| 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_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 |

RESULT

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

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

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

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

2 个答案:

答案 0 :(得分: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:

答案 1 :(得分:0)

试试这个......

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的值