簡體   English   中英

PHP Codeigniter-如果列不等於NULL,則加入表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM