Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Codeigniter-如果列不等于NULL,则连接表_Php_Sql_Query Builder_Codeigniter 3 - Fatal编程技术网

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如何,都可以更正您的查询以带回客户\备注

不清楚你在问什么。。。连接不会发生在空值的情况下(因为空值实际上意味着“无值”),并且是以每行为单位工作的,因此您应该已经得到了具有非空值的行的结果。我的错,重新编写了问题并用完整函数更新了代码。@TomPearce
join()
相当于MySQL连接,因此,它不会在
NULL
的值上进行连接,因此您是否需要将此(
nhu client\u contacts
)条件设置为
左连接
,以便仍然可以找到其余的?在返回
$query
-
log\u message()
之前,返回
$this->db->last\u query()
。首先使用MySQL,然后在builder中修复它。@MacKiee为此表示感谢,工作起来很有魅力!如果你发布它,我会把它标记为答案!:)@TomPearce很高兴听到它最终成功了!=)不清楚你在问什么。。。连接不会发生在空值的情况下(因为空值实际上意味着“无值”),并且是以每行为单位工作的,因此您应该已经得到了具有非空值的行的结果。我的错,重新编写了问题并用完整函数更新了代码。@TomPearce
join()
相当于MySQL连接,因此,它不会在
NULL
的值上进行连接,因此您是否需要将此(
nhu client\u contacts
)条件设置为
左连接
,以便仍然可以找到其余的?在返回
$query
-
log\u message()
之前,返回
$this->db->last\u query()
。首先使用MySQL,然后在builder中修复它。@MacKiee为此表示感谢,工作起来很有魅力!如果你发布它,我会把它标记为答案!:)@TomPearce很高兴听到它最终成功了!=)