Php使用Foreach并获得单个结果

时间:2017-01-27 16:25:05

标签: php arrays foreach

我在mysql中有一个表,我找到了一些值并将它们放在一个数组中。

假设数组的值为1和5

现在我将这个数组用于另一个表中的查询,其中我有5个id,我想它会显示我所有的id减去数组中的那些(所以只有2,3,4)

这是我用来在查询中传递foreach的代码

foreach ($array as $value) {
    $arr=array();   

    $query= "SELECT * FROM test WHERE data NOT LIKE '%$value%'";
    $result=mysqli_query($con,$query);

    while($row = mysqli_fetch_array($result)) {
        echo $row["id"];
    }
}

我想得到的结果是“2,3,4”,但它给了我2,3,4,5,1,2,3,4

这是数组创建

$array= array();
$query= "SELECT * FROM test WHERE time1>= '$startTime' AND time1 <=    '$endTime'";
$result=mysqli_query($con,$query);
while($row = mysqli_fetch_array($result)) {
$array[]=$row["data"];
}

怎么办?

2 个答案:

答案 0 :(得分:4)

为什么不做更好的SQL查询?

$query= "SELECT * FROM test WHERE data NOT IN (".implode(',',$array).")";

或翻译:

SELECT * FROM test WHERE data NOT IN (1,5)

答案 1 :(得分:1)

更改为$query= "SELECT * FROM test WHERE data NOT LIKE '%$value%' AND id NOT IN ({implode(',',$array_of_ids_you_dont_want)})";

编辑:

我在第一个数组中添加了“id”键,并将“数据”字段移到了“数据”键。

$array= array();
$query= "SELECT * FROM test WHERE time1>= '$startTime' AND time1 <=    '$endTime'";
$result=mysqli_query($con,$query);
while($row = mysqli_fetch_array($result)) {
    $array[]= array(
        'id'=>$row['id'],
        'data'=>$row["data"]
    );
}

有了id,你可以使用array_map函数获取所有id的新数组。然后,您可以使用此数组来构造where条件。在foreach之前使用它是明智的,因为每次迭代它都是相同的。最后现在$ array包含子数组,当foreering元素时将是带有id和数据键的数组。

$exclude_ids = array_map(function($el){return $el['id'];},$array);
$exclude_ids_query = "id NOT IN ({implode(',',$exclude_ids)})";

foreach ($array as $element) {
    $arr=array();   
    $query= "SELECT * FROM test WHERE data NOT LIKE '%{$element['data']}%'".$exclude_ids_query;
    $result=mysqli_query($con,$query);

    while($row = mysqli_fetch_array($result)) {
        echo $row["id"];
    }
}