MySql NOT来自mysql获取结果的许多值

时间:2014-12-16 05:35:27

标签: php mysql

我有两个相互依赖的MySql查询 我的表'

----------
  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 i。在上面的例子中,我应该得到id 4,5,6,7

3 个答案:

答案 0 :(得分:1)

implode will not give desired valuemultidimensional array开始,所以首先需要获取所有id's的数组以形成one-dimensional array,然后在数组上使用implode id's

$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。

答案 1 :(得分:0)

您必须将$res1(一个二维数组)更改为一维ID数组才能使用implode

$ids_from_first_query = array();
foreach($res1 as $result_row) {
    $ids_from_first_query[] = $result_row['id'];
}

$ids_as_string = implode(',', $ids_from_first_query);
$sql2 = 'SELECT * FROM table1 WHERE id NOT IN(' . $ids_as_string . ')';

在上面的代码中,$ids_as_string将如下所示:

1,2,3

因此可以在MySQL查询中使用

答案 2 :(得分:0)

这里你得到的是二维数组,这是因为它无法正常工作

while($each=mysql_fetch_array($res1))
{
$array[]=$each[id];
}
$imp=implode(",",$array);
$sql2 = "SELECT * FROM table1 WHERE id NOT IN (".$imp.")";

试试这个会起作用