2015-11-05 2 views
0

При создании запроса, я хочу использовать join в два раза, как следующее:Использование присоединиться заявление, но если таблица пуста

$this->db->select('*'); 
$this->db->from('members'); 
$this->db->join('members_group', 'members_group.mgid = members.mgid'); 
$this->db->join('members_profiles','members_profiles.mid = members.mid'); 
$this->db->where('members.mid=' . $id); 
$this->db->get() 

Проблема в join заявление № 2, если нет данных в пределах members_profiles таблица, запрос возвращает пустой массив. но если я удалю оператор join, результат будет правильным.

Как я могу сделать данные возвращаемый запрос содержит лиmembers_profilesтаблицы данных, связанный с элементом или не?

+0

Может использовать левый присоединиться? –

+0

@John Ruddell: Я ничего не меняю, это форма заявления о соединении по умолчанию. –

+0

Да, я это знаю. что я говорю, вам нужно изменить свое соединение на левое соединение. или же он будет отфильтровывать все строки –

ответ

3

Codeigniter позволяет указать варианты соединения типа в третьем параметре метода join().

Попробуйте это:

$this->db->join('members_profiles','members_profiles.mid = members.mid', 'left'); 

Обычных (внутренний) присоединиться подавляет запись из первой таблицы (левой), которые не соответствуют второй таблицы (правой). Левое соединение сохраняет записи слева, которые не соответствуют записи справа. Он помещает значения NULL в столбцы набора результатов, которые должны были поступать из отсутствующей правой таблицы. Это делает именно то, что вы хотите.

+0

проверить визуальное объяснение SQL-соединений Джеффом Этвудом: http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ – Vickel

+0

Спасибо, но есть небольшая проблема, колонка 'mid' возвращает пустое значение, если нет данных, связанных с этим элементом в таблице 'members_profiles'. –

+0

@ LionKing. Попробуйте полное внешнее соединение, чтобы получить все строки из левой и правой таблиц? – Terminus

0

Используйте этот

$this->db->select('*'); 
$this->db->from('members'); 
$this->db->join('members_group', 'members_group.mgid = members.mgid'); 
$this->db->join('members_profiles','members_profiles.mid = members.mid','left'); 
$this->db->where('members.mid=' . $id); 
$this->db->get() 
Смежные вопросы