2014-09-23 29 views
1

我需要加入两个表tableAtableB,但问题是,在tableB我有两个IDtableA我需要加入他们,所以我得到这两个值。我想用Codeigniter的活动记录类来实现它。这里是一个小的演示:如何使用其他表中使用的一个表中的多个ID连接两个表?

tableA: 
╔══════════╦════════════╗ 
║ video_id ║ video_name ║ 
╠══════════╬════════════╣ 
║  1 ║ short  ║ 
║  2 ║ long  ║ 
║  3 ║ black  ║ 
║  4 ║ white  ║ 
╚══════════╩════════════╝ 

tableB 
╔═════════╦════════╦════════╗ 
║ pair_id ║ pair_a ║ pair_b ║ 
╠═════════╬════════╬════════╣ 
║  1 ║  1 ║  2 ║ 
║  2 ║  1 ║  4 ║ 
║  3 ║  4 ║  3 ║ 
║  4 ║  3 ║  2 ║ 
╚═════════╩════════╩════════╝ 

这不起作用:

$this->db->select('*') 
     ->from("tableA") 
     ->join('tableB AS A', 'tableA.video_id = A.pair_a') 
     ->select("tableA.video_name as VIDEO_A") 

     ->join('tableB AS B', 'tableA.video_id = B.pair_b') 
     ->select("tableA.video_name as VIDEO_B") 

     ->get() 
     ->result(); 

的最终结果必须是这样的:

stdClass Object 
(
    [0] => stdClass Object 
     (
      [VIDEO_A] => short 
      [VIDEO_B] => long 
     ) 

    [1] => stdClass Object 
     (
      [VIDEO_A] => short 
      [VIDEO_B] => white 
     ) 

    [2] => stdClass Object 
     (
      [VIDEO_A] => white 
      [VIDEO_B] => black 
     ) 

    [3] => stdClass Object 
     (
      [VIDEO_A] => black 
      [VIDEO_B] => long 
     ) 

) 
+0

你现在得到了什么? – worldask 2014-09-23 08:01:39

+0

VIDEO_A和VIDEO_B是相同的。 – fjckls 2014-09-23 08:03:12

回答

2

你混淆了表A和tableB的中您的查询。对于B中的每一件物品你都想要什么,所以开始加入。然后,加入重命名的表格,然后从重命名的表格中选择项目。

->from("tableB") 
->join('tableA AS pairA', 'pairA.video_id = tableB.pair_a') 
->join('tableA AS pairB', 'pairB.video_id = tableB.pair_b') 
->select("pairA.video_name as VIDEO_A, pairB.video_name as VIDEO_B") 
+0

非常感谢!完善! – fjckls 2014-09-23 08:08:47

相关问题