使用CodeIgniter查询MySQL,选择field为NULL的行

时间:2010-03-22 00:56:55

标签: mysql activerecord codeigniter null

我正在使用CodeIgniter的Active Record类来查询MySQL数据库。我需要在表中选择一个字段未设置为NULL的行:

$this->db->where('archived !=', 'NULL');
$q = $this->db->get('projects');

只返回此查询:

SELECT * FROM projects WHERE archived != 'NULL';

archived字段是DATE字段。

有没有更好的方法来解决这个问题?我知道我可以自己编写查询,但我不想在整个代码中坚持使用Active Record。

10 个答案:

答案 0 :(得分:134)

where('archived IS NOT NULL', null, false)

答案 1 :(得分:58)

Active Record肯定有一些怪癖。将数组传递给$this->db->where()函数时,它将生成一个IS NULL。例如:

$this->db->where(array('archived' => NULL));

生成

WHERE `archived` IS NULL 

怪癖是负面IS NOT NULL没有等价物。但是,有一种方法可以产生正确的结果,但仍然会逃脱声明:

$this->db->where('archived IS NOT NULL');

产生

WHERE `archived` IS NOT NULL

答案 2 :(得分:7)

Null不能设置为字符串...

$this->db->where('archived IS NOT', null);

当null未包含在引号中时,它可以正常工作。

答案 3 :(得分:6)

CodeIgniter 3

$this->db->where('archived IS NOT NULL');

生成的查询是:

WHERE archived IS NOT NULL;
  

$ this-> db-> where('archived IS NOT NULL', null false ); <<没必要

<强>反

$this->db->where('archived');

生成的查询是:

WHERE archived IS NULL;

答案 4 :(得分:0)

使用以下更好 For is not null

其中(&#39;存档IS NOT NULL&#39;,null);

For is null

其中(&#39;已存档&#39;,null);

答案 5 :(得分:0)

只是为了给你另一个选项,你可以使用NOT ISNULL(archived)作为你的WHERE过滤器。

答案 6 :(得分:0)

Codeigniter生成一个&#34; IS NULL&#34;通过不带参数的呼叫进行查询:

$this->db->where('column');

生成的查询是:

WHERE `column` IS NULL

答案 7 :(得分:0)

$ this-> db-> or_where('end_date IS','NULL',false);

答案 8 :(得分:0)

您可以(如果要测试NULL)

$this->db->where_exec('archived IS NULL) 

如果要测试NOT NULL

$this->db->where_exec('archived IS NOT NULL) 

答案 9 :(得分:-2)

检查任一列是否为null的一种方法是

$this->db->where('archived => TRUE);
$q = $this->db->get('projects');

在php中如果列有数据,则可以表示为True,否则为False 在where命令中使用多个比较并检查列数据是否为空  这样做

这里是完整的示例我是如何在where子句(Codeignitor)中过滤列的。最后一个显示非空压缩

$where = array('somebit' => '1', 'status' => 'Published', 'archived ' => TRUE );
$this->db->where($where);