Php 左键将一个表与其自身连接起来

Php 左键将一个表与其自身连接起来,php,mysql,left-join,Php,Mysql,Left Join,我想合并senderID和receiverID相同的“messages”表,以实现类似对话流的效果,但当我运行此表时,它返回的行总数为10422行。当所有行都为3000行时,它如何返回更多 //示例场景:id=8的用户转到这个url Sample.com/inbox/user=275。我想显示它们之间的所有消息,以实现类似于对话流/聊天的功能。也许这就是您真正想要的 SELECT s1.receiverID, s2.senderID FROM messages as s1 LEFT JOIN m

我想合并senderID和receiverID相同的“messages”表,以实现类似对话流的效果,但当我运行此表时,它返回的行总数为10422行。当所有行都为3000行时,它如何返回更多


//示例场景:id=8的用户转到这个url Sample.com/inbox/user=275。我想显示它们之间的所有消息,以实现类似于对话流/聊天的功能。

也许这就是您真正想要的

SELECT s1.receiverID, s2.senderID
FROM messages as s1
LEFT JOIN messages as s2 ON s1.receiverID = s2.senderID
样本日期会有很大帮助

编辑:

鉴于这一评论:

我们有用户A和用户B,我想返回他们之间的所有消息

你在找这个:

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

此示例可以帮助您了解为什么在联接后会获得更多行

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

正如您所写的join,它是说“给我系统中的每个消息组合,其中一条消息的发送者与另一条消息的接收者相同,如果有任何人已经收到消息但没有发送任何消息,也给我显示那些消息,发送者的值为空。”

添加
和s1.pk>s2.pk是否有帮助?(其中,
pk
是表的主键。)发送方/接收方ID代表什么?(编辑:另外,正如Russell Davis所指出的,我没有看到您正在使用左连接。)您能提供一个简单的示例和预期结果吗?对不起,我现在对用户、URL和消息有点困惑。你能提供你的最小表结构,样本数据和你的预期结果吗?id,receiverID,senderID,message,status。至于预期结果,它取决于两个用户之间的消息数量。我们有用户A和用户B,我想返回他们之间的所有消息示例场景:id=8的用户转到此url。我想显示他们之间的所有消息,以实现类似于对话流/聊天的效果。@MarianPetrov:如果这个问题已经解决,记得接受这个答案(我注意到你还没有接受任何答案)
select * -- (or whatever)
from messages
where
(senderid = [userId] and receiverid = [otherUserId])
or (senderid = [otherUserId] and receiverid = [userId])