1

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

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

线

| 身份证 | 标题 |

user_x_thread

| 身份证 | ID_THREAD | ID_USER |

消息

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

线程中有一个线程列表

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

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

我想显示用户@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)

4

2 回答 2

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:

于 2013-09-29T10:56:36.893 回答
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 的值

于 2013-09-29T11:06:30.333 回答