簡體   English   中英

Codeigniter活動記錄在哪里不起作用

[英]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

情況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)

通過比較具有非空值的列,您可以自動排除空值,這些空值需要使用不同的語法處理。

您需要為查詢添加一個額外的括號內的子句; 看這里怎么樣

案例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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM