繁体   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