[英]PHP MySQL multiple conditions in query
我有一個包含一些記錄和列的數據庫:“類型”,“ id”和其他。 我想選擇數組$ typearray中提到的所有帶有“類型”的記錄,但沒有$ idarray中有ID的記錄。 我試圖做類似的事情:
$result = mysql_query("SELECT * FROM db
WHERE type IN('".implode("','",$typearray)."')
AND id NOT IN('".implode("','",$idarray)."')
ORDER BY date DESC LIMIT 10");
但這似乎不起作用-
type IN('".implode("','",$typearray)."')
條件正常,但第二個則不行。 起初,我認為問題出在列類型上-兩個數組都包含字符串,“ type”列是VARCHAR(10),id是INT,但是將其更改為string並沒有幫助。 我究竟做錯了什么?
編輯:
如果我打印查詢,則會得到以下信息:
SELECT * FROM db
WHERE type IN('apple','tomato','potato')
AND id NOT IN('20','1','10','15','8')
ORDER BY date DESC LIMIT 10
第一個條件很好:它僅選擇蘋果,西紅柿和土豆。 第二個條件不起作用,即使我手動鍵入也是如此:
id NOT IN('20','1','10','15','8')
要么
id NOT IN('20,1,10,15,8')
要么
id NOT IN(20,1,10,15,8)
它仍然失敗。
編輯2:
其實算了 我是個白痴。 我混合了一些變量...
您應該嘗試此查詢,或者至少執行echo $result, "\\n";
,進入mysql工作台,看看它能提供什么。
我會說當查詢不起作用時的默認行為:首先在Mysql Workbench中(或在任何SQL運行器中,例如Toad,Squirrel ...)
$result = mysql_query("SELECT * FROM db
WHERE type IN('".implode("','",$typearray)."')
AND id NOT IN('".implode("','",$idarray)."')
ORDER BY date DESC LIMIT 10");
如果$typearray
為空,則您正在尋找type IN ('')
,該類型可能永遠不匹配。 如果$idarray
為空,則id not in ('')
中尋找可能總是匹配的id not in ('')
。
而且,如果$typearray
或$idarray
包含無效字符,則會出現錯誤。
[編輯]順便說一句,如果$typearray
或$idarray
可能包含無效字符,則可以使用array_map和mysqli_escape_string :
$result = mysql_query("SELECT * FROM db
WHERE type IN('".implode("','", array_map('mysql_escape_string', $typearray))."')
AND id NOT IN('".implode("','", array_map('mysql_escape_string', $idarray))."')
ORDER BY date DESC LIMIT 10");
您不需要轉義整數變量:
...
AND id NOT IN(" . implode(",", $idarray).")
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.