[英]PHP Codeigniter - Join a table if column does not equal NULL
設定:
在PHP 5服務器的變體上運行的Codeigniter 3。 使用查詢生成器來處理數據庫。
背景:
創建具有客戶端配置文件的軟件。 用戶可以將多個注釋添加到個人資料,並將聯系人鏈接到該注釋。 然后,該配置文件使用Codeigniter 3的查詢生成器中的join()
方法在相應的配置文件上顯示所有注釋和聯系人。
問題:
對於一般性注釋,可以在沒有客戶聯系的情況下添加注釋。 這將在數據庫中設置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_id
值為NULL
,則不會返回該行的任何數據。
我試圖找出的是是否有一種方法可以執行以下操作:如果client_notes_client_contact_id
不為null,則加入表,否則繼續進行。
否則,如果有值且為NULL
,則將以其他任何方式聯接表,則不要聯接。
任何幫助表示贊賞!
使用上述查詢構建器的當前 MySQL查詢將像這樣“構建”:
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
但是,這將要求所有JOIN具有匹配的可用ID。 因此,正確的MySQL將為client_notes_client_contact_id
鍵上的LEFT JOIN
,這是您要求的有條件的 。
在這種情況下,調整您的“查詢”構建器,使其在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_contact_id都帶回client_notes_client_contact_id
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.