3

这看起来很简单,但它失败了。我要做的就是使用下面的代码删除除第一行之外的所有内容。

$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_id 都会被回显。为什么当 select 的相同语句起作用时,delete语句不起作用

4

3 回答 3

4

就像@Sabashan 说的 DELETE 语句中的 LIMIT 只允许一个参数。

如果要排除第一行,请使用以下内容:

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 被外部 select 包围,所以 MySQL 在临时表中实现结果并使用它而不是为每个删除重新运行查询(MySQL 不允许这样做)。

于 2013-07-05T19:13:58.830 回答
2

由于限制关键字附近的语法不正确,delete 语句不起作用...您不能这样做LIMIT 1,18446744073709551615...LIMIT使用时必须后跟一个数字DEELTE

参考:删除 MYSQL

只有在 SELECT 语句中才能有LIMIT 1,18446744073709551615子句

参考:SELECT MYSQL

你可以做的或者是找到你想要删除的第一行的 course_id,(希望如果表设置正确并且它是表的主键和自动增量),请执行以下操作:

$sql = "DELETE FROM ".TABLE_PREFIX."news 
        WHERE course_id >=".COURSE_ID_YOU_WANT_DELETED.";

或者这也有效:

$sql = "DELETE FROM ".TABLE_PREFIX."news 
        WHERE course_id !=".COURSE_ID_YOU_WANT.";
于 2013-07-05T18:55:33.573 回答
0

您应该找到第一行的 id 并执行

DELETE FROM table WHERE id != id_found

或找到您必须删除的 id 和

DELETE FROM table WHERE id IN (ids_found)
于 2013-07-05T19:01:11.997 回答