Codeigniter活动记录在哪里不起作用

doi*_*tin 3 php mysql codeigniter codeigniter-2

我使用活动记录运行CodeIgniter.下面是我的表格结构:

id (int)   user (int)   is_complete (tinyint)
------------------------------------------------
1          24           1
2          24           1
3          24           NULL
4          24           0
5          24           0
Run Code Online (Sandbox Code Playgroud)

情况1

$this->db->where('user', 24);
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT * FROM `table` WHERE `user` = 24
Run Code Online (Sandbox Code Playgroud)

工程和退货:

id   user   is_complete
--------------------------
1    24     1
2    24     1
3    24     NULL
4    24     0
5    24     0
Run Code Online (Sandbox Code Playgroud)

案例2

$this->db->where('user', 24);
$this->db->where('is_complete', 1);
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT * FROM `table` WHERE `user` = 24 AND `is_complete` = 1
Run Code Online (Sandbox Code Playgroud)

工程和退货:

id   user   is_complete
--------------------------
1    24     1
2    24     1
Run Code Online (Sandbox Code Playgroud)

案例3

$this->db->where('user', 24);
$this->db->where('is_complete !=', 1);
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT * FROM `table` WHERE `user` = 24 AND `is_complete` != 1
Run Code Online (Sandbox Code Playgroud)

不起作用并且正在返回:

id   user   is_complete
--------------------------
4    24     0
5    24     0 
Run Code Online (Sandbox Code Playgroud)

案例4

$this->db->where('user', 24);
$this->db->where('is_complete <>', 1);
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT * FROM `table` WHERE `user` = 24 AND `is_complete` <> 1
Run Code Online (Sandbox Code Playgroud)

不起作用并且正在返回:

id   user   is_complete
--------------------------
4    24     0
5    24     0 
Run Code Online (Sandbox Code Playgroud)

需要的结果

应该返回:

id   user   is_complete
--------------------------
3    24     NULL
4    24     0
5    24     0
Run Code Online (Sandbox Code Playgroud)

我使用这种where()方法做错了什么,或者有更好的方法来实现这个目标吗?

hal*_*fer 6

这是数据库级别的问题,虽然它不是错误 - 这就是SQL如何使用空值.这个查询:

SELECT
    *
FROM
    `table`
WHERE
    `user` = 24 AND `is_complete` != 1
Run Code Online (Sandbox Code Playgroud)

将返回is_complete不等于1但不为null的记录.如果您还希望包含空记录,则需要执行以下操作:

SELECT
    *
FROM
    `table`
WHERE
    `user` = 24 AND
    (`is_complete` != 1 OR `is_complete` IS NULL)
Run Code Online (Sandbox Code Playgroud)

通过比较具有非空值的列,您可以自动排除空值,这些空值需要使用不同的语法处理.

您需要为查询添加一个额外的括号内的子句; 看这里怎么样.