2013-01-08 51 views
1

我有表的這種結構:Codeigniter加入表?

Table Name: collisions 
Fields: id, creator1, creator2 
(1, 1, 2) - simple data in my sql table 

Table Name: creators 
Fields: id, artistname 
(1, john smith)- simple data in my sql table 
(2, steven michael)- simple data in my sql table 

我需要的是加入這些表,所以我可以得到藝術家的名字,而不是creator1 ID和創建者2的ID。

這是我迄今所做的:

$this->db->select('collisions.*, creators.artist_name AS cr1, creators.artist_name as cr2'); 
$this->db->join('creators', 'collisions.creator1 = cr1.id AND collisions.creator2 = cr2.id', 'left'); 
$data = $this->db->get('collisions')->result(); 

,但我收到此錯誤:

Unknown column 'cr1.id' in 'on clause' 

SELECT `collisions`.*, `creators`.`artist_name` AS cr1, `creators`.`artist_name` as cr2 FROM (`collisions`) LEFT JOIN `creators` ON `collisions`.`creator1` = `cr1`.`id` AND collisions.creator2 = cr2.id 

誰能告訴我什麼,我做錯了什麼?

+0

避免 –

回答

0

該做的工作使用他們正在創造的問題alises

$this->db->select('collisions.*, cr1.artist_name as cr1, cr2.artist_name as cr2'); 
    $this->db->join('creators AS cr1', 'collisions.creator1 = cr1.id', 'left'); 
    $this->db->join('creators AS cr2', 'collisions.creator2 = cr2.id', 'left'); 
    $data = $this->db->get('collisions')->result(); 
1

請使用,而不是別名實際的表名:

$this->db->select('collisions.*, creators.artist_name AS cr1, creators.artist_name as cr2'); 
$this->db->join('creators', 'collisions.creator1 = creators.id AND collisions.creator2 = creators.id', 'left'); 
$data = $this->db->get('collisions')->result(); 

的原因,你不能使用別名是SQL的執行是按以下順序:

1)FROM clause 
2)WHERE clause 
3)GROUP BY clause 
4)HAVING clause 
5)SELECT clause 
6)ORDER BY clause 

,因爲你正在使用在中創建的別名選擇子句,在之後執行,其中子句。

這就是爲什麼你不能使用不存在的別名。

+0

這個固定的錯誤,但我仍然不得到CR1和CR2數據。 – sm13294

+0

@ sm13294請檢查我已編輯答案! – sandip