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

おそらく、最初にデータベース内のデータをシリアル化解除する必要があります。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

like 演算子 match only match same 理解できない たとえばdem、like よりもdemolishsoも表示されます

そのためには、最初に unserlize が必要であり、ループまたは 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

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 に答える