2016-06-07 2 views
2

У меня проблема с соединением Mysql. У меня две таблицы, таблица center_contacts и center_contacts_notes. center_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'); 

Обратите внимание, что я использую 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) 
) 

Возможно ли это, и если да, то как бы я его выполнил? Благодарю.

+2

Вы пробовали GROUP_CONCAT() – anju

ответ

1

Я не знаю, можете ли вы получить двумерный массив, как вы уже упоминали, но есть обходное решение для получения подобных результатов. Это может быть полезно для вас.

Что вам нужно сделать, это использовать 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 будет 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