Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何基于两列在SQL中的一个表上建立两个联接?_Php_Mysql_Sql - Fatal编程技术网

Php 如何基于两列在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 这将返回两列有效用户

我有一个SQL查询,它以下面列出的格式从
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,具体取决于他们是否发送或接收了消息。下面的解决方案解决了我的问题。:)