2016-03-23 3 views
0

Setup:PHP Codeigniter - Вступите в таблицу, если столбец не равен NULL

Codeigniter 3 работает на варианте 5 сервера PHP. Использование Query Builder для работы с db.

фона:

Создание программного обеспечения, которое имеет профиль клиента. Пользователи могут добавлять несколько заметок в профиль и связывать контакт с этой записью. Затем профиль отображает все заметки и контакт в соответствующем профиле, используя метод join() из Query Builder Codeigniter 3.

Выпуск:

примечание может быть добавлено без клиентского контакта, в случае обобщенной ноты. Это устанавливает значение по умолчанию NULL в БД, которое, в свою очередь, предотвращает возврат возвращаемых примечаний client_model, поскольку он не может присоединиться к таблицам.

Текущий код:

function get_client_notes($client_id) 
{ 
    $this->db->join('nh_note_types', 'nh_note_types.type_id = nh_client_notes.client_notes_type'); 
    $this->db->join('nh_user_profiles', 'nh_user_profiles.user_profile_user_id = nh_client_notes.client_notes_added_by'); 
    $this->db->join('nh_client_contacts', 'nh_client_contacts.client_contact_id = nh_client_notes.client_notes_client_contact_id'); 
    $this->db->order_by("client_notes_added_date", "desc"); 
    $query = $this->db->get_where('nh_client_notes', array('client_notes_client_id' => $client_id)); 
    return $query; 
} 

В настоящее время, если значение для client_notes_client_contact_idNULL это будет не возвращает никаких данных для этой строки.

Что я пытаюсь выяснить, есть ли способ сделать следующее: ЕСЛИ client_notes_client_contact_id не имеет значения null, тогда присоединитесь к таблицам, иначе продолжите мимо.

Или любым другим способом, который присоединился бы к таблицам, если есть значение, и где это NULL, то не присоединиться.

Любая помощь приветствуется!

+0

Непонятно, что вы просите ... ПРИСОЕДИНИТЕСЬ не для значений NULL (поскольку нуль фактически означает «нет значения»), и это работает на основе каждой строки, поэтому вы уже должны получать результаты для строк которые имеют значение, отличное от NULL. – Narf

+0

Мой плохой, переформулировал вопрос и обновил код с полной функцией. –

+0

@TomPearce 'join()' эквивалентно соединению MySQL, поэтому он * не будет * присоединяться к значениям, где это 'NULL', так что вам нужно это условие (' nh_client_contacts') быть 'LEFT JOIN', поэтому все еще можно найти покой? Перед возвратом '$ query' -' log_message() '' $ this-> db-> last_query() '. Сначала работайте с MySQL, затем исправьте его в построителе. – MackieeE

ответ

2

Ваш текущий MySQL запросов с выше Query Builder будет «сборки», как это:

SELECT 
    * 
FROM 
    nh_client_notes 
JOIN nh_note_types ON 
    (nh_note_types.type_id = nh_client_notes.client_notes_type) 
JOIN nh_user_profiles ON 
    (nh_user_profiles.user_profile_user_id = nh_client_notes.client_notes_added_by) 
JOIN nh_client_contacts ON 
    (nh_client_contacts.client_contact_id 
     = 
    nh_client_notes.client_notes_client_contact_id 
    ) 
WHERE 
    client_notes_client_id = 479 
ORDER BY 
    client_notes_added_date DESC 

Однако, это потребует все стыки, чтобы иметь соответствующий ID доступен. Таким образом, правильный MySQL был бы LEFT JOIN по ключу client_notes_client_contact_id, который, как вы просили, условно.

В этом случае отрегулируйте построитель запросов, чтобы иметь третий параметр на join(), чтобы сделать это «левым».

<?php 
$this->db->join(
    'nh_client_contacts', 
    'nh_client_contacts.client_contact_id = nh_client_notes.client_notes_client_contact_id', 
    'left' 
); 
?> 

При этом, это будет исправить свой запрос, чтобы вернуть client_notes независимо от client_notes_client_contact_id.

Смежные вопросы