1

假设我的 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());

但它只打印出具有相同数组的结果。

4

3 回答 3

0

like 运算符仅匹配它不理解的相同,例如您dem在 like 中,它也会显示demolishso

我认为为此您需要首先取消序列化,然后通过循环或 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)
+-------------+-------------+
于 2012-11-06T15:45:34.373 回答
0

您可能希望首先对数据库中的数据进行反序列化。一旦它在 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());
}

但就像马里奥说的那样,您可能想考虑选项机制,也许序列化数据不是您需要的。不过,这应该希望对您有用。

于 2012-11-06T15:49:25.740 回答
0

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');

查看:在 MySql 中

于 2013-03-23T17:45:08.793 回答