PHP Codeigniter-如果列不等于NULL,则连接表
设置:PHP Codeigniter-如果列不等于NULL,则连接表,php,sql,query-builder,codeigniter-3,Php,Sql,Query Builder,Codeigniter 3,设置: 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_n
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;
}
Codeigniter 3运行在PHP5服务器的变体上。使用查询生成器处理数据库
背景:
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;
}
创建具有客户端配置文件的软件。用户可以向配置文件添加多个注释,并将联系人链接到该注释。然后,配置文件使用Codeigniter 3的查询生成器中的join()
方法显示相应配置文件上的所有注释和联系人
问题:
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;
}
如果是一般注释,则可以在不与客户联系的情况下添加注释。这将在数据库中设置默认值NULL
,这反过来会阻止客户机\u模型返回注释,因为它无法加入表
当前代码:
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\u notes\u client\u contact\u id
的值为NULL
则不会返回该行的任何数据
我想知道的是,是否有办法做到以下几点:
如果client\u notes\u client\u contact\u id
不为空,则加入表,否则继续
或者,如果有一个值且该值为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
但是,这将要求所有联接都有一个匹配的ID可用。因此,正确的MySQL应该是client\u notes\u client\u contact\u id
键上的LEFT JOIN
,这是您要求的条件
在本例中,请调整查询生成器,使其上有第三个参数,使其为“左”
<?php
$this->db->join(
'nh_client_contacts',
'nh_client_contacts.client_contact_id = nh_client_notes.client_notes_client_contact_id',
'left'
);
?>
这样做,无论客户\备注\客户\联系人\ id如何,都可以更正您的查询以带回客户\备注 您当前使用上述查询生成器进行的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
但是,这将要求所有联接都有一个匹配的ID可用。因此,正确的MySQL应该是client\u notes\u client\u contact\u id
键上的LEFT JOIN
,这是您要求的条件
在本例中,请调整查询生成器,使其上有第三个参数,使其为“左”
<?php
$this->db->join(
'nh_client_contacts',
'nh_client_contacts.client_contact_id = nh_client_notes.client_notes_client_contact_id',
'left'
);
?>
这样做,无论客户\备注\客户\联系人\ id如何,都可以更正您的查询以带回客户\备注 不清楚你在问什么。。。连接不会发生在空值的情况下(因为空值实际上意味着“无值”),并且是以每行为单位工作的,因此您应该已经得到了具有非空值的行的结果。我的错,重新编写了问题并用完整函数更新了代码。@TomPearcejoin()
相当于MySQL连接,因此,它不会在NULL
的值上进行连接,因此您是否需要将此(nhu client\u contacts
)条件设置为左连接
,以便仍然可以找到其余的?在返回$query
-log\u message()
之前,返回$this->db->last\u query()
。首先使用MySQL,然后在builder中修复它。@MacKiee为此表示感谢,工作起来很有魅力!如果你发布它,我会把它标记为答案!:)@TomPearce很高兴听到它最终成功了!=)不清楚你在问什么。。。连接不会发生在空值的情况下(因为空值实际上意味着“无值”),并且是以每行为单位工作的,因此您应该已经得到了具有非空值的行的结果。我的错,重新编写了问题并用完整函数更新了代码。@TomPearcejoin()
相当于MySQL连接,因此,它不会在NULL
的值上进行连接,因此您是否需要将此(nhu client\u contacts
)条件设置为左连接
,以便仍然可以找到其余的?在返回$query
-log\u message()
之前,返回$this->db->last\u query()
。首先使用MySQL,然后在builder中修复它。@MacKiee为此表示感谢,工作起来很有魅力!如果你发布它,我会把它标记为答案!:)@TomPearce很高兴听到它最终成功了!=)