Mysql连接多个列

时间:2016-06-21 17:06:04

标签: php mysql codeigniter

我遇到了一个问题,我希望通过ID加入多个列。

我的第一张表看起来像这样:

submitter_id   reviewer_id   processor_id
75             34            91

我要加入的表格如下:

id   first_name   last_name
75   Bob          Smith
34   Albert       McDonald
91   Joe          Blo

我正在尝试创建一个查询,该查询将查看我的第一个表中的每个ID,然后获取每个ID的名字和姓氏。

例如,执行此操作的查询应返回如下内容:

[
    75 => "Bob Smith",
    34 => "Albert McDonald",
    91 => "Joe Blo"
];

有人可以帮我构建一个可以实现此目的的查询吗?谢谢!

4 个答案:

答案 0 :(得分:2)

使用不同的别名

连接同一个表3次
select t1.submitter_id, t1.reviewer_id, t1.processor_id,
       t2.first_name as submitter_firstname, t2.last_name as submitter_lastname,
       t3.first_name as reviewer_firstname, t3.last_name as reviewer_lastname,
       t4.first_name as processor_firstname, t4.last_name as processor_lastname
from firstTable t1
left join namesTable t2 on t1.submitter_id = t2.id
left join namesTable t3 on t1.reviewer_id = t3.id
left join namesTable t4 on t1.processor_id = t4.id

答案 1 :(得分:0)

我认为你真正想要的更像是这样:

SELECT n.id, CONCAT(n.first_name, ' ', n.last_name)
  FROM names n
  JOIN ids i
    ON n.id = i.submitter_id
    OR n.id = i.reviewer_id
    OR n.id = i.processor_id
 GROUP BY n.id;

这只是进行一次连接,显示您实际想要的2列的记录并限制,因此用户只列出一次。此外,如果用户没有设置名称,您可能不想只返回ID,而您也不想要左连接。

编辑: 如果您需要索引,可以在submitter_id,reviewer_id,processor_id上创建一个索引,如果您需要性能。

答案 2 :(得分:0)

您希望所有内容都在一个结果集中,因此您可以使用UNION ALL

SELECT p.id, CONCAT(p.first_name, ' ', p.last_name) as name
  FROM person p
  JOIN firstTable f
    ON p.id = f.submitter_id

UNION ALL

SELECT p.id, CONCAT(p.first_name, ' ', p.last_name) as name
  FROM person p
  JOIN firstTable f
    ON p.id = f.reviewer_id

UNION ALL

SELECT p.id, CONCAT(p.first_name, ' ', p.last_name) as name
  FROM person p
  JOIN firstTable f
    ON p.id = f.processor_id

如果您打算仅为某些群组使用某些条件,我认为这是一种更好的方法,例如where reviewer_id > 100。如果没有,先生。 Egole更清洁。

答案 3 :(得分:0)

假设您需要在第一个表中使用一行来返回结果中的一行。

SELECT tt.submitter_id , CONCAT(ta.first_name, ' ', ta.last_name) , 
       tt.reviewer_id  , CONCAT(tb.first_name, ' ', tb.last_name) ,
       tt.processor_id , CONCAT(tc.first_name, ' ', tc.last_name) 
FROM `transaction` as tt , `names` as ta , `names` as tb , `names` as tc 
WHERE tt.submitter_id = ta.id AND 
      tt.reviewer_id  = tb.id AND
      tt.processor_id = tc.id 

结果将是3个ID,每个事务在一行中具有相应的名称。