获取存在2个字段的所有行在Array for PDO SQL中?

时间:2013-01-02 04:12:24

标签: sql pdo

我有一个像这样结构的数组:

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行:

   |  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,但更愿意在我的查询中直接执行此操作以降低循环量。

这是可能的,或者是我唯一的选择来循环数组并一次查询每一个...这对我来说似乎非常密集,因为数组的长度增长!!

我希望in_array可能有一些SQL方法?

1 个答案:

答案 0 :(得分: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)

(execution)