我遇到了Mysql连接问题。我有两个表,一个center_contacts
表和一个center_contacts_notes
。 center_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)
)
这是可能的,如果是这样,我将如何实现它?感谢。
答案 0 :(得分:0)
我不知道你是否可以像你提到的那样得到二维数组,但是有一种解决方法可以获得类似的结果。这可能对您有所帮助。
您需要做的是使用Group By
和group_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通过提供分隔符值将备注字符串转换为数组。