这似乎很简单,但它失败了。我想要做的就是使用下面的代码删除第一行以外的所有行。
$sql = "DELETE FROM ".TABLE_PREFIX."news WHERE course_id = $course_id LIMIT 1,18446744073709551615";
$result = mysql_query($sql, $db);
如果我这样做......
$sql = "SELECT news_id FROM ".TABLE_PREFIX."news WHERE course_id = $course_id LIMIT 1,18446744073709551615";
$result = mysql_query($sql, $db);
while ($row = mysql_fetch_assoc($result)) {
echo $row['news_id'] . '<br>';
}
除了第一个news_ids之外,所有news_id都被回应。当select 的相同语句工作时,为什么删除语句不有效?
答案 0 :(得分:4)
像@Sabashan一样说DELETE语句中的LIMIT只允许一个参数。
如果要排除第1行,请使用以下内容:
DELETE FROM tnews WHERE course_id = $course_id
AND primary_key NOT IN
(SELECT * FROM (
SELECT primary_key FROM tnews ORDER BY something LIMIT 1 OFFSET 0))
内部SELECT选择要排除的记录。 外部SELECT解决了您无法从要删除的同一个表中进行选择的问题。 因为内部SELECT被外部选择封闭,MySQL将结果实现在临时表中,并使用它而不是为每次删除重新运行查询(MySQL不允许)。
答案 1 :(得分:2)
由于limit关键字附近的语法不正确,删除语句无法正常工作... LIMIT 1,18446744073709551615
... LIMIT
与{{1}一起使用时必须跟一个数字}
参考:DELETE MYSQL
只有在SELECT语句中才能有DEELTE
子句
参考:SELECT MYSQL
你可以做的是找到你要删除的第一行的course_id,(希望如果表格设置正确并且它是表格和自动增量的主键),请执行以下操作:
LIMIT 1,18446744073709551615
或者这也有效:
$sql = "DELETE FROM ".TABLE_PREFIX."news
WHERE course_id >=".COURSE_ID_YOU_WANT_DELETED.";
答案 2 :(得分:0)
您应该找到第一行的ID并执行
DELETE FROM table WHERE id != id_found
或找到您必须删除的ID
DELETE FROM table WHERE id IN (ids_found)