【发布时间】:2013-11-26 01:16:24
【问题描述】:
我目前正在尝试使用 mysql 实现消息传递系统。到目前为止,我的架构由以下表格组成:threads、thread_user、messages、message_read,详见thread messaging system database schema design。我需要用户所属的线程数,但不仅仅是已发布的用户。 我可以首先通过查询找到用户所属的线程列表:
SELECT threads.id
FROM threads INNER JOIN thread_user ON thread_user.thread_id = threads.id
WHERE thread_user.user_id = 1
AND threads.draft = false
然后我可以使用以下方法找到主用户以外的其他用户发布的主题列表:
SELECT threads.id
FROM threads INNER JOIN messages ON messages.thread_id = threads.id
WHERE messages.user_id != 1
线程必须至少有一条消息,因此通过找到这两个子查询之间的交集,我可以找到用户所属的线程列表,并且不仅仅是发布的用户。
例如,第一个查询显示用户所属的线程返回 3、7、10、12,第二个查询显示主用户以外的用户发布的线程列表返回其他 1, 2, 3, 4, 5, 6, 7, 8, 9, 11。然后使用这两组的交集我们可以确定线程 3 和 7 是用户所属的线程,而不是用户所属的线程发帖的用户。
有没有办法在 mysql 查询本身中做这个交集?
提前致谢, 本
【问题讨论】:
标签: mysql messaging private-messaging