[英]Codeigniter active record where is not working
我使用活動記錄運行CodeIgniter。 下面是我的表格結構:
id (int) user (int) is_complete (tinyint)
------------------------------------------------
1 24 1
2 24 1
3 24 NULL
4 24 0
5 24 0
$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
$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
$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
$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)
通過比較具有非空值的列,您可以自動排除空值,這些空值需要使用不同的語法處理。
您需要為查詢添加一個額外的括號內的子句; 看這里怎么樣 。
案例3正在運作 。 SQL在數字上與NULL
不同,需要不同的比較器。 我想到的方式是NULL是沒有任何東西,而0是數字0; 這是一個微妙的差異。 所以!= 1
給出除1之外的所有數字,而要找到null,你必須使用is
/ is not null
比較器。
查找所需結果的查詢是:
$this->db->where("((is_complete = 0) OR (is_complete is null))",NULL,FALSE);
搜索!= 1
與搜索= 0
。 (如果is_complete
可能有一個值為'3'的值。如果你搜索你想要的東西,而不是那些不應該存在的東西,你的代碼可能會得到更少的問題。
如果使用第三個(FALSE)參數來刪除反引號,則where
語句需要第二個參數。
使用活動記錄進行多數據庫支持總是更好。
您可以為查詢使用這樣的活動記錄
案例3
$this->db->where('user', 24, FALSE);
$this->db->where('is_complete !=', 1, FALSE);
案例4
$this->db->where('user', 24, FALSE);
$this->db->where('is_complete <>', 1, FALSE);
第三個參數用於刪除導致sql查詢問題的后退。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.