微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐