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

   |  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

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 回答