设定:
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
位于表格的任何其他方式,那么不会加入。
感谢任何帮助!
答案 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。