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

PHP Codeigniter - Join a table if column does not equal NULL

设置:

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

背景:

创建具有客户端配置文件的软件。用户可以向个人资料添加多个注释,并向该注释添加 link 个联系人。然后,配置文件会使用 Codeigniter 3 的查询生成器中的 join() 方法显示相应配置文件上的所有注释和联系人。

问题:

在通用注释的情况下,可以在没有客户联系的情况下添加注释。这会在数据库中设置 NULL 的默认值,从而防止 client_model 来自 return正在查看笔记,因为它无法加入表格。

当前代码:

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,则不会 return 该行的任何数据。

我想知道的是是否有办法执行以下操作: 如果 client_notes_client_contact_id 不为空则加入表格,否则继续过去。

或任何其他连接表的方式,如果有一个值并且它在 NULL 的位置,那么 不要 连接。

感谢任何帮助!

您的 current MySQL 使用上述查询构建器的查询将 'build' 像这样:

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() 上添加第三个参数,从而使此 'left'。

<?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