2014-03-01 45 views
0

MySQL的加入表用相同的ID衝突: 這裏是我的查詢MySQL的連接查詢,無法訪問第一個表ID列

$this->db->select(); 
$this->db->from('manual'); 
$this->db->join('contact', 'contact.id = manual.contact_id'); 
$this->db->where('people_id',$practicien); 
$this->db->where('DATE(day)', $datee); 
$this->db->order_by('TIME(startTime)', 'ASC'); 
$query = $this->db->get(); 

我需要從manual表訪問id列。
但是,當我使用'id'我從contact表獲得id列的值。

請修復此錯誤。

回答

0
$this->db->select("manual.id as manual_id"); 
       $this->db->from('manual as manual'); 
       $this->db->join('contact as contact', 'contact.id = manual.contact_id'); 
       $this->db->where('people_id', $practicien); 
       $this->db->where('DATE(day)', $datee); 
       $this->db->order_by('TIME(startTime)', 'ASC'); 
       $query = $this->db->get(); 
0

您可以像前場放置表名稱:

Select manual.id, * from ... 
+0

查詢有笨實施。所以我需要使用$ this-> db-> select('manual.id,*'); – Sparkz

+0

@Sparkz:參考:[* Codeigniter:選擇數據*](http://ellislab.com/codeigniter/user-guide/database/active_record.html#select) –

2

您可以嘗試使用Alias Names

SELECT * FROM table AS t JOIN tbl2 t2 ON t.id = t2.id 

然後t.idt2.id訪問您的ID。

0

添加or die (__LINE__." ".mysqli_error($con))看到錯誤消息

$con會是這樣$con=mysqli_connect("localhost","root") ...

或使用or die (__LINE__." ".mysql_error())看到錯誤消息當U使用mysql

0

使用*有它的問題。其中一個問題是列在不同表中具有相同的名稱。如果你需要從manual表的詳細列

select manual.id as manual_id, contact.* 
. . . 

,只需添加他們:

這可能會解決你的問題。通過使用列別名,可以刪除名稱衝突問題。

作爲說明,當您使用using子句時,SQL提供了另一種解決此問題的機制。但是,只有在外鍵引用和主鍵具有相同名稱時才能執行此操作。實際上,這是爲相互引用的兩列使用相同名稱的一個很好的理由。如果你這樣做,你的查詢可能看起來像:

SELECT * 
FROM manual m JOIN 
    contact c 
    USING (contact_id) 
WHERE people_id = '18' AND 
     DATE(day) = '2014-03-13' 
ORDER BY TIME(startTime) ASC; 

你不會有名稱衝突,你只會得到一個id列回來。

0

由於manual.id將數組中的第一列,你可以這樣做 -

$query = $this->db->get(); 
$row = $query->result_array(); 
return $row[0]; 

參考 - http://ellislab.com/codeigniter/user-guide/database/results.html

或者你可以用一個別名

$this->db->select('manual.id AS `yourid`, *', false); 
添加到您的 select()

參考 - http://ellislab.com/codeigniter/user-guide/database/active_record.html#select

+0

我試了下面的行,但得到一個內部服務器錯誤。 $ this-> db-> select('manual.id AS nid,*',FALSE); – Sparkz

0

SKG答案幫我實現了輸出: 這裏是最終的代碼。

$this->db->select('manual.id as rdvid, startTime, endTime, day, firstname, lastname'); 
$this->db->from('manual'); 
$this->db->join('contact', 'contact.id = manual.contact_id'); 
$this->db->where('people_id',$practicien); 
$this->db->where('DATE(day)', $datee); 
$this->db->order_by('TIME(startTime)', 'ASC'); 
$query = $this->db->get(); 
//print_r($this->db->last_query()); 
return $query;