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

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

id (int)   user (int)   is_complete (tinyint)
------------------------------------------------
1          24           1
2          24           1
3          24           NULL
4          24           0
5          24           0

情况1

$this->db->where('user', 24);

查询

SELECT * FROM `table` WHERE `user` = 24

工程和退货:

id   user   is_complete
--------------------------
1    24     1
2    24     1
3    24     NULL
4    24     0
5    24     0

案例2

$this->db->where('user', 24);
$this->db->where('is_complete', 1);

查询

SELECT * FROM `table` WHERE `user` = 24 AND `is_complete` = 1

工程和退货:

id   user   is_complete
--------------------------
1    24     1
2    24     1

案例3

$this->db->where('user', 24);
$this->db->where('is_complete !=', 1);

查询

SELECT * FROM `table` WHERE `user` = 24 AND `is_complete` != 1

不起作用并且正在返回:

id   user   is_complete
--------------------------
4    24     0
5    24     0 

案例4

$this->db->where('user', 24);
$this->db->where('is_complete <>', 1);

查询

SELECT * FROM `table` WHERE `user` = 24 AND `is_complete` <> 1

不起作用并且正在返回:

id   user   is_complete
--------------------------
4    24     0
5    24     0 

需要的结果

它应该返回:

id   user   is_complete
--------------------------
3    24     NULL
4    24     0
5    24     0

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

解决方法:

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

SELECT
    *
FROM
    `table`
WHERE
    `user` = 24 AND `is_complete` != 1

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

SELECT
    *
FROM
    `table`
WHERE
    `user` = 24 AND
    (`is_complete` != 1 OR `is_complete` IS NULL)

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

您需要为查询添加一个额外的括号内的子句; see here for how.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...