作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 2 个相互依赖的 MySql 查询。
我的“表1”
----------
id
----------
1
2
3
4
5
6
7
我的第一个查询
$sql1 = "SELECT * FROM table1 WHERE";// some condition which gives me id's 1,2,3
$res1=$obj->_executeQuery($sql1);
$res1=$obj->getAll($res1);
结果是给我数组
Array
(
[0] => Array
(
[id] => 1
..
..
)
[1] => Array
(
[id] => 2
..
..
)
[2] => Array
(
[id] => 3
..
..
)
)
我想在同一个“table1”上运行另一个查询,其中不等于我从第一个查询中获得的 ID 列表。
我的第二个查询
$sql2 = "SELECT * FROM table1 WHERE id NOT IN (" . implode(',', $res1) . ")";
这并不是只向我显示一个 id,即第一个。在上面的例子中我应该得到 id 的 4,5,6,7
最佳答案
由于 implode 不会给出
多维数组
上的所需值
,因此首先您需要获取所有 id 的数组
形成一维数组
,然后对 id
数组使用 implode:
$id=array();
foreach ($res1 as $key=>$inner_array){
$id[]= $inner_array['id'];
}
您也可以在这里使用array_walk
,如下所示:
array_walk($res1,function($c) use (&$id) {$id[] = $c['id'];});
但我认为最好的是array_map
:
$id = array_map(function($i) {
return $i['id'];
}, $res1);
$sql2 = "SELECT * FROM table1 WHERE id NOT IN (" . implode(',', $id) . ")";
注意:当你进行选择时,如果你需要选择很少的列,请指定你的列,不必要的选择全部会减慢你的sql处理速度。
假设这里:SELECT * FROM table1 WHERE
,如果您只需要id,那么请只选择id。
关于php - MySql NOT IN 许多来自 mysql 获取结果的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27498171/
我是一名优秀的程序员,十分优秀!