我有一个像这样结构的数组:
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
方法?
答案 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)