2017-06-21 40 views
-1

我有一个关于MySQL的问题。以下是我正在努力完成的一个简短例子。我想通过加入它从另一个表中获取名字和姓氏字段,但是,我需要为我的主表中的两个不同的列执行此操作。在mysql中使用不同列加入表两次

$this->db->select(' 
        project_id, 
        manager_id, 
        user_id, 
        CONCAT(users.first_name, " ", users.last_name) as manager 
        CONCAT(users.first_name, " ", users.last_name) as user 
       '); 
$this->db->from('projects'); 
$this->db->join('users', 'users.user_id = projects.manager_id'); 
$this->db->join('users', 'users.user_id = projects.user_id'); 

我不相信上面的例子会返回我期待的。我期望上面的代码将manageruser设置为相同的名称,表中的manager_iduser_id是相同的名称。我希望上面的例子有道理。有人知道我可以做到这一点吗?

我有一种感觉,解决方案可能与选择子查询有关,但我不确定如何去做这件事。

+0

林不知道你想要什么......你想得到经理的名字?或者获得用户也是经理的项目? –

+1

您需要使用别名来连接两次相同的表。不知道如何在codeigniter中做到这一点,也许'加入('用户作为mgr','mgr.user_id = projects.manager_id')'。然后在Select:'CONCAT(mgr.first_name,“”,mgr.last_name)中使用这个别名作为manager' – dnoeth

+0

我不知道codeigniter,但是这个看起来和你的[case]非常相似(https://stackoverflow.com/questions/28319482 /加入同一表 - 两次为不同列)或[这一个](https://stackoverflow.com/questions/9158390/codeigniter-mysql-join-same-table-twice) –

回答

2

如果我把它正确的,你想加入一次从表中的用户抢经理的名字,第二次从用户表 抓住用户的名字,所以它应该是这样的:

SELECT project_id 
     ,manager_id 
     ,user_id 
     ,CONCAT(a.first_name, " ", a.last_name) as manager 
     ,CONCAT(b.first_name, " ", b.last_name) as user 
    FROM projects 
INNER JOiN users a 
     ON a.user_id = projects.manager_id 
INNER JOiN users b 
     ON b.user_id = projects.user_id 
+0

正是我在找的东西。谢谢! – Nic

+0

@不用客气 –