Php 如何基于两列在SQL中的一个表上建立两个联接?
我有一个SQL查询,它以下面列出的格式从Php 如何基于两列在SQL中的一个表上建立两个联接?,php,mysql,sql,Php,Mysql,Sql,我有一个SQL查询,它以下面列出的格式从Chatmodel返回唯一用户ID组合的列表 我当前的SQL查询: SELECT DISTINCT if(to_user_id > from_user_id, to_user_id, from_user_id) as sender, if(to_user_id > from_user_id, from_user_id, to_user_id ) as target FROM chats AS pair 这将返回两列有效用户
Chat
model返回唯一用户ID组合的列表
我当前的SQL查询:
SELECT DISTINCT
if(to_user_id > from_user_id, to_user_id, from_user_id) as sender,
if(to_user_id > from_user_id, from_user_id, to_user_id ) as target
FROM chats AS pair
这将返回两列有效用户ID:
sender | target
1 | 2
10 | 12
3 | 4
5 | 4
我想从User
模型返回sender
和target
ID旁边的first\u name
和last\u name
。我对SQL不是很熟悉,所以我对它挠头已经有一段时间了
我希望得到的回报是:
sender | first_name | last_name | target | first_name | last_name |
1 | Tom | Jones | 2 | John | Smith
10 | Chris | Comb | 12 | Sam | Sloth
3 | Harry | Houdini | 4 | Jo | Jones
5 | Will | Wilson | 4 | Jo | Jones
任何帮助都将不胜感激 试试这个。您可能需要更改列名
Select O.Sender, S.First_Name, S.Last_Name, O.Target, T.First_Name, T.LastName
From (
SELECT DISTINCT
if(to_user_id > from_user_id, to_user_id, from_user_id) as sender,
if(to_user_id > from_user_id, from_user_id, to_user_id ) as target
FROM chats AS pair
) O
LEFT JOIN Users S ON O.Sender = S.UserID
LEFT JOIN Users T ON O.Target = T.UserID
名称存储在哪里?一个名为
users
的表请参见:为什么“发送者”不是来自用户id的?因为没有单独的对话和消息模型,但我查询它主要是为了获得对话。我还没有足够的证据证明单独的对话和消息模型是合理的。因此,我希望根据两列值返回重复数据消除结果:to_user_id和from_user_id。用户可以是to_user_id和from_user_id,具体取决于他们是否发送或接收了消息。下面的解决方案解决了我的问题。:)