2011-01-06 74 views
0

請幫我理解正確的連接語法。幫助PHP MySQL加入

我有一個名爲表庫存其中有:

trans_id  
trans_items items -> item_id   
trans_user employees -> person_id   
trans_date     
trans_comment     
trans_inventory  

正如你可以在上面看到,trans_items是在項目表的外鍵,並且trans_user是員工表的外鍵和員工ID是國外關鍵人桌。

現在我想要做的是在HTML中顯示庫存表,但不是顯示員工ID,我希望顯示員工姓名。


編輯.......................................... ...... ,所以我能夠以僅顯示與此代碼僱員的名字:

$this->db->select('inventory.*, items.name ,people.last_name'); 
$this->db->from('inventory'); 
$this->db->join('items', 'inventory.trans_items = items.item_id' , 'left'); 
$this->db->join('people', 'inventory.trans_user = people.person_id' , 'left'); 
$this->db->where('deleted', 0); 
$this->db->order_by('trans_date desc'); 

與模型代碼:

foreach($report_data as $row) 
     { 
      $tabular_data[] = array($row['name'], $row['last_name'],$row['trans_date'], $row['trans_inventory'], $row['trans_comment']); 
     } 

,但我需要它是第一姓名,所以我做了這些:

$this->db->select('inventory.*, items.name ,CONCAT(people.first_name, " ",people.last_name) as employee'); 
$this->db->from('inventory'); 
$this->db->join('items', 'inventory.trans_items = items.item_id' , 'left'); 
$this->db->join('people', 'inventory.trans_user = people.person_id' , 'left'); 
$this->db->where('deleted', 0); 
$this->db->order_by('trans_date desc'); 

與模型代碼:

foreach($report_data as $row) 
     { 
      $tabular_data[] = array($row['name'], $row['employee'],$row['trans_date'], $row['trans_inventory'], $row['trans_comment']); 
     } 

將錯誤,如果我會用concat函數。請幫忙。

+0

你能告訴我們你到目前爲止有什麼? – David 2011-01-06 05:32:32

+0

什麼樣的列是trans_items?請提供一些示例數據。 – 2011-01-06 05:33:14

+0

順便說一句,當你來到這裏宣佈你的請求是「緊急的」時,你聽起來相當傲慢自大。如果你想「緊急」去支付某人來幫助你。 – 2011-01-06 05:39:27

回答

1

這應該爲你工作

$this->db->select('inventory.*, items.name '); 
    $this->db->from('inventory'); 
    $this->db->join('items', 'inventory.item_id = items.item_id'); 
    $this->db->order_by('trans_date desc'); 

    return $this->db->get()->result_array(); 
+0

我想你需要將CONCAT(first_name,「」,last_name)更改爲CONCAT(people.first_name,「」,people.last_name)---由於我不確定員工和人員表格的表格結構 – shankhan 2011-01-06 06:17:27

0
SELECT 
    t.trans_id, 
    i.item_name, 
    t.trans_user, 
    t.trans_date, 
    t.trans_comment, 
    t.trans_inventory 
FROM 
    trans as t 
     LEFT JOIN 
      items as i 
       ON 
        i.item_id = t.trans_items 
LIMIT 0, 30; 

一些assumsions在類似的項目名稱費爾德上述查詢做是item_name,主表名是trans

我用什麼這裏是左連接。

在本例中,使用左連接是最好的選擇,因爲它只從items表中選擇一行。

更多聯接:MySQL :: MySQL 5.0 Reference Manual :: 12.2.8.1 JOIN Syntax

---更新。 PS:在您更新CodeIgniter之前發佈。而且我不熟悉它。所以你可以刪除這個答案,或者把它留在這裏供其他人蔘考。

0

以下將爲您工作。

$this->db->select('items.name , inventory.trans_user, inventory.trans_date, inventory.trans_inventory, inventory.trans_comment'); 
$this->db->from('inventory'); 
$this->db->join('items', 'inventory.item_id = items.item_id'); 
$this->db->order_by('inventory.trans_date desc'); 

return $this->db->get()->result_array(); 

編輯-------------------------

試試以下。這將有助於...

$this->db->select('inventory.*, items.name ,CONCAT(employees.first_name, " ",employees.last_name) as employee'); 
$this->db->from('inventory'); 
$this->db->join('items', 'inventory.trans_items = items.item_id' , 'left'); 
$this->db->join('employees', 'inventory.trans_user = employees.person_id' , 'left'); 
$this->db->join('people', 'employees.person_id = people.person_id' , 'left'); 
$this->db->where('deleted', 0); 
$this->db->order_by('trans_date desc'); 

注意:我假定名字和姓氏屬性是employees表的一部分。您可以將其更改爲任何屬於的表名。

謝謝!

Hussain。