2016-06-07 91 views
2

我遇到了Mysql加入的問題。我有兩張桌子,一張center_contacts桌子和一張center_contacts_notescenter_contacts_notes通過在兩個表中找到的contact_id進行鏈接。結合Mysql的結果加入

center_contacts_notes裏面可以有多行,每contact_id我想抓住所有這些,並把它們放在結果的子數組中。

例如,這裏是我的center_contacts_notes表的樣子:

contact_id | note 
------------------------ 
1    test 
2    hello 
3    sup 
1    moo 

這裏就是我試圖獲取數據:

$this->db->select('center_contacts.id, FirstName, LastName, center_contacts_notes.note'); 
$this->db->from('center_contacts'); 
$this->db->join('center_contacts_notes', 'center_contacts_notes.contact_id = center_contacts.id'); 

請注意,我用的笨3.

這裏是我從中得到:

Array 
(
    [id] => 1 
    [FirstName] => Bob 
    [LastName] => Smith 
    [note] => test 
) 
Array 
(
    [id] => 1 
    [FirstName] => Bob 
    [LastName] => Smith 
    [note] => moo 
) 

這些是我的結果中的兩個不同的數組。這對我的使用來說是不切實際的,因爲我需要一個包含兩個註釋的數組。這樣的事情:

Array 
(
    [id] => 1 
    [FirstName] => Bob 
    [LastName] => Smith 
    [note] => Array(test, moo) 
) 

這是可能的,如果是的話,我會如何實現它?謝謝。

+2

你試過GROUP_CONCAT() – anju

回答

1

我不知道你是否可以像你提到的那樣得到二維數組,但是有一種解決方法可以得到類似的結果。這可能對你有所幫助。

你需要做的是使用Group Bygroup_concat()Group by該表格由contact_id表示,並在center_contacts_notes.note上應用group_concat()

您的查詢應該看起來像這樣。

$this->db->select('center_contacts.id, FirstName, LastName, GROUP_CONCAT(center_contacts_notes.note)'); 
$this->db->from('center_contacts'); 
$this->db->join('center_contacts_notes', 'center_contacts_notes.contact_id = center_contacts.id'); 
$this->db->group_by('center_contacts.id'); 

默認情況下,group_concat會將列連接到,。您可以按照以下方式進行更改。

GROUP_CONCAT(center_contacts_notes.note SEPARATOR 'YOUR_SEPARATOR_STRING') 

這將返回結果如下:

Array 
(
    [id] => 1 
    [FirstName] => Bob 
    [LastName] => Smith 
    [note] => test[YOUR_SEPARATOR_STRING] moo 
) 

可以使用PHP explode通過提供分隔值注意字符串轉換成數組。

+0

Group_concat似乎已經工作。這不是一個數組,但我仍然可以按照預期解析它。謝謝。 – Nic