[英]mysql select where in array (php, mysql)
可以說我在mysql行中有一個數組:
a:3:{i:1;a:3:{i:0;s:1:"1";i:1;s:1:"3";i:2;s:1:"5";}i:4;a:3:{i:0;s:2:"21";i:1;s:2:"25";i:2;s:2:"29";}i:5;a:1:{i:0;s:2:"33";}}
看起來像這樣:
Array
(
[1] => Array
(
[0] => 1
[1] => 3
[2] => 5
)
[4] => Array
(
[0] => 21
[1] => 25
[2] => 29
)
[5] => Array
(
[0] => 33
)
)
現在,我通過_GET傳遞數組,我想打印出在我的mysql和傳遞的數組中包含相同值的所有行。 例如,如果我傳遞此數組:
Array
(
[1] => Array
(
[0] => 5
)
)
應該顯示一個結果,因為傳遞的數組包含選項5。我試圖這樣做:
$pecul = serialize($array);
$q=mysql_query("SELECT id from table WHERE options like '%$pecul%'")or die(mysql_error());
但它只會打印出具有相同數組的結果。
like運算符match僅匹配相同的dem
,它不理解,例如您在dem
中輸入like,否則它也會顯示demolish
我認為為此,您需要先取消序列化,然后通過loop或in_array()函數通過php查找
%like%
所做的假設這是表Persons
,您使用了查詢
SELECT * FROM Persons WHERE City LIKE '%tav%'
+-------------+-------------+
| id | city |
+-------------+-------------+
| 1 | Sandnes |
+-------------+-------------+
| 2 | Stavanger |
+-------------+-------------+
所以結果將是
+-------------+-------------+
| id | city |
+-------------+-------------+
| 2 | Stavanger | <----it has tav (s-tav-anger)
+-------------+-------------+
您可能想先對數據庫中的數據進行反序列化。 將其放入PHP數組后,您可以檢查這些選項,因此請說:
if(in_array("5",$array)) {
$q=mysql_query("SELECT id from table WHERE options=5")or die(mysql_error());
}
如果您需要查詢所有選項,則可以執行如下循環:
foreach($array as $option) {
$q=mysql_query("SELECT id from table WHERE options='$option'")or die(mysql_error());
}
但是,就像馬里奧所說,您可能想考慮選項機制,也許串行數據不是您所需要的。 希望它可以照原樣為您工作。
IN()檢查一個值是否在一組值內
mysql> SELECT 2 IN (0,3,5,7);
-> 0
mysql> SELECT 'wefwf' IN ('wee','wefwf','weg');
-> 1
SELECT val1 FROM tbl1 WHERE val1 IN (1,2,'a');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.