结合Mysql Join的结果

时间:2016-06-07 13:18:19

标签: php mysql codeigniter join

我遇到了Mysql连接问题。我有两个表,一个center_contacts表和一个center_contacts_notescenter_contacts_notes通过两个表格中的contact_id链接。

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');

请注意,我使用的是Codeigniter 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)
)

这是可能的,如果是这样,我将如何实现它?感谢。

1 个答案:

答案 0 :(得分:0)

我不知道你是否可以像你提到的那样得到二维数组,但是有一种解决方法可以获得类似的结果。这可能对您有所帮助。

您需要做的是使用Group Bygroup_concat()。在Group by之前contact_id使用group_concat()并在center_contacts_notes.note上应用$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
)

这将返回如下结果:

overflow-x:

您可以使用PHP explode通过提供分隔符值将备注字符串转换为数组。