0

私はこのように構造化された配列を持っています:

Array
(
    [0] => Array
        (
            [0] => 1 //x
            [1] => 3 //y
        )

    [1] => Array
        (
            [0] => 8 //x
            [1] => 7 //y
        )

    [2] => Array
        (
            [0] => 9 //x
            [1] => 9 //y
        )
)

私が知りたいのは、2つのフィールドが配列の第2レベルの値の任意のペアと一致するすべての行を取得するクエリを作成する方法です。たとえば、次の2つの行があるとします。

   |  uid  |  id  |  x  |  y  |
    - - - - - - - - - - - - - 
   |   1   |  1   |  1  |  3  |  //both x and y exist together 
   |   1   |  1   |  9  |  9  |  //both x and y exist together
   |   1   |  1   |  9  |  5  |  //no combination do not select this

私は配列をループしてSELECTすべての反復を使用することを避けようとしていますが、ループの量を減らすためにクエリで直接それを行う方法を望んでいます。

これは可能ですか、それとも配列をループして一度に1つずつクエリを実行する唯一のオプションです...配列の長さが長くなるにつれて、これは非常に集中的に思えます。

in_array多分何か方法があると思っていましたSQLか?

4

1 に答える 1

1

私の提案は、提供した配列から長いクエリを生成することです。

<?php
$arr = array(
    array(1,3),
    array(8,7),
    array(9,9)
);

function wherify($val) {
    return "(`x` = ".$val[0]." AND `y` = ".$val[1].")";
}

$criteria = implode(" OR ", array_map("wherify", $arr));

$query = "SELECT * FROM `table` WHERE $criteria";
echo $query;

これにより、次のようなクエリが作成されます。

SELECT * FROM `table`
    WHERE (`x` = 1 AND `y` = 3)
       OR (`x` = 8 AND `y` = 7)
       OR (`x` = 9 AND `y` = 9)

(実行)

于 2013-01-02T04:44:24.367 に答える