PHP Codeigniter - 如果列不等于NULL,则加入表

时间:2016-03-23 15:54:44

标签: php sql query-builder codeigniter-3

设定:

Codeigniter 3在PHP 5服务器的变种上运行。使用查询生成器来处理数据库。

背景

创建具有客户端配置文件的软件。用户可以向配置文件添加多个注释,并将联系人链接到该注释。然后,配置文件使用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位于表格的任何其他方式,那么不会加入。

感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

您使用上述“查询”构建器的当前 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 Available。因此,正确的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_contact_id如何,这都会更正您的查询以恢复client_notes。