SELECT s1.receiverID, s2.senderID
FROM messages as s1
LEFT JOIN messages as s2 ON s1.receiverID = s2.senderID
我想组合发送者 ID 和接收者 ID 相同的"消息"表以实现类似对话流的东西,但是当我运行它时,它总共返回 10,422 行。当所有行都是 3000 时,它如何返回更多?!
示例场景:ID = 8 的用户转到此 URL sample.com/inbox/user=275。我想显示它们之间的所有消息,以实现诸如对话流/聊天之类的内容。
你不想加入。 您只想获取同时具有发送方和接收方的所有消息。
select * -- (or whatever)
from messages
where
(senderid = [userId] and receiverid = [otherUserId])
or (senderid = [otherUserId] and receiverid = [userId])
您写的加入是说"给我系统中消息的每个组合,其中一条消息的发送者与另一条消息的接收者相同,如果有人收到消息但未发送任何消息,也向我显示发送方值的空值。
也许这就是您真正想要的?
select t1.senderID as t1senderID, t1.receiverID as t1receiverID,
t2.senderID as t2senderID, t2.receiverID as t2receiverID
from messages t1
join messages t2
on t1.senderID = t2.receiverID and t1.receiverID = t2.senderID
样品日期会有很大帮助。
编辑:
鉴于此评论:
我们有用户 A 和用户 B,我想返回它们之间的所有消息
您正在寻找以下内容:
select * from t1
where (senderID = 'A' and receiverID = 'B') or
(senderID = 'B' and receiverID = 'A')
此示例可以帮助您弄清楚为什么在联接后获得更多行。
rID sID
1 2
1 3
2 1
3 1
s1.rID s1.sID s2.rID s2.sID
1 2 2 1
1 2 3 1
1 3 2 1
1 3 3 1
2 1 1 2
3 1 1 3