【发布时间】:2013-11-19 21:39:12
【问题描述】:
我有两张桌子:
表消息(保存消息的创建者和消息)
id - creatorId - msg
还有一个表message_viewers(告诉谁可以读取消息msgId)
msgId - userId
如果我以用户 1 的身份创建消息并将其发送给用户 2 和用户 3,表格将如下所示:
tbl_message:
1 - 1 - 'message'
tbl_message_viewers:
1 - 2
1 - 3
我想要做的是获取用户 x1...xN(任意数量的用户)之间的消息,并且只获取他们之间的消息。
(例如,如果用户是 1、2 和 3,我想要创建者为 1、2 或 3 的消息,并且用户是 2,3,创建者 = 1、1 和 3,创建者 = 2 和 1、2 creator = 3)
我对 1 和 2、2 和 3、1 和 3 之间的消息不感兴趣,而只对 3 个人之间的消息感兴趣.
我尝试了不同的方法,例如在消息 id 上连接两个表,选择 creatorId IN (X,Y) 所在的消息,然后仅获取 userId IN (X, Y) 所在的行。也许是关于对行进行分组和计数的事情,但我想不出一种可行的方法。
编辑:这里的 SQL Fiddle
【问题讨论】:
-
一条消息在 tbl_message_viewers 中是否需要至少一行?
-
是的。并且帖子的创建者不会向自己发送消息。
-
不,是三个人的专属。