我在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"];
}
怎么办?
答案 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"];
}
}