我正在尝试完成删除表中事件 ID 等于某个值(唯一键)且 ID 不在我的数组中的所有行;
假设 event_id=5
有 4 行(1,2,3,4)
而我的数组有 (1,2)
我想删除事件 ID 等于 5
的 3,4
。
为此: ->从数组中选择 ID 并将 id 放入另一个数组(似乎有效)
->删除除select查询自带的行以外的所有行(失败则删除表的所有行)。
$query = "SELECT file_id FROM FILES WHERE event_id=$event_id AND name IN ('$names')";
$result = $sql->query($query);
//printf("$query: %s\n", $query);
var_dump($query);
//printf("\n");
if (!$result) {
var_dump($result);
printf("Query failed: %s\n", $mysqli->error);
sendResponse(417, json_encode("Query failed"));
exit;
}
//printf("\n");
$rows = array();
while($row = $result->fetch_row()) {
$rows[]=$row;
printf("\n");
}
$result->close();
var_dump($rows);
printf("\n");
$delete = join("', '",$rows);
var_dump($delete);
printf("\n");
//send delete request here
$query ="DELETE FROM FILES WHERE event_id=$event_id AND file_id NOT IN ('$delete')";
$result = $sql->query($query);
//printf("$query: %s\n", $query);
var_dump($query);
printf("\n");
if (!$result) {
var_dump($result);
printf("\n");
printf("Query failed: %s\n", $mysqli->error);
sendResponse(417, json_encode("Query failed"));
exit;
}
日志:
string(143) "SELECT file_id FROM FILES WHERE event_id=7 AND name IN ('sample-1.pdf', '2012-lve-vegas-faq.pdf', 'sample-2.pdf', 'sample-3.pdf', 'sample.pdf')" array(5) { [0]=> array(1) { [0]=> string(2) "89" } [1]=> array(1) { [0]=> string(2) "90" } [2]=> array(1) { [0]=> string(2) "91" } [3]=> array(1) { [0]=> string(2) "92" } [4]=> array(1) { [0]=> string(2) "93" } } string(41) "Array', 'Array', 'Array', 'Array', 'Array" string(99) "DELETE FROM FILES WHERE event_id=7 AND file_id NOT IN ('Array', 'Array', 'Array', 'Array', 'Array')"
在日志中可以看到$delete = join("', '",$rows);
causes ('Array', 'Array', 'Array', 'Array ', 'Array')
不是我想要的,应该是 ('89','90', '91', '92', '93')
我怎样才能让它工作?
最佳答案
大概应该是$rows[]=$row['file_id'];或 $rows[]=$row[0]; (取决于获取方法)。但是,这会更可行:
DELETE FROM FILES WHERE event_id=$event_id AND name NOT IN ('$names')
关于php - Delete NOT IN array 删除所有行,PHP Mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16549046/