您好我想在Mysql中使用DELETE语句以删除第1000个条目后的所有条目,但同时按列的降序排序条目...这是我正在使用的代码:
mysql_query("DELETE FROM 'tblname' WHERE @i IN (1000,ROW_COUNT()) ORDER BY points DESC");
Run Code Online (Sandbox Code Playgroud)
虽然没有发生错误,但它似乎没有因为某些原因而工作....我在WHERE子句中遇到麻烦...有人可以帮忙吗?
你的表名附近有引号:
mysql_query("DELETE FROM 'tblname' WHERE @i IN (1000,ROW_COUNT()) ORDER BY points DESC");
Run Code Online (Sandbox Code Playgroud)
用反引号替换它们:
mysql_query("DELETE FROM `tblname` WHERE @i IN (1000,ROW_COUNT()) ORDER BY points DESC");
Run Code Online (Sandbox Code Playgroud)
编辑:(删除记录)
尝试:
mysql_query("DELETE TOP (1000) FROM `tblname` ORDER BY points DESC");
Run Code Online (Sandbox Code Playgroud)
你也可以尝试:
DELETE FROM tablename ORDER BY points DESC LIMIT 1000 *
Run Code Online (Sandbox Code Playgroud)
假设这是一个名为的列id:
mysql_query("DELETE FROM tablename WHERE id > 1000");
Run Code Online (Sandbox Code Playgroud)
这将留下前1000行并删除所有其他条目.
还有一些例子:
DELETE FROM `table` WHERE `id` < 1000
DELETE FROM `table` WHERE `id` LIMIT 0, 1000
DELETE FROM `table` WHERE ID BETWEEN 1 AND 999
Run Code Online (Sandbox Code Playgroud)
脚注: 如果您正在为表名使用变量(这可能是一种可能,但没有看到完整的代码),请使用以下内容,如果是这种情况; 很多人.
$tblname = "your_table_name";
mysql_query("DELETE FROM `".$tblname."` WHERE @i IN (1000,ROW_COUNT()) ORDER BY points DESC");
Run Code Online (Sandbox Code Playgroud)
您还应该考虑使用mysqli_*带有预准备语句或PDO的函数.这些mysql_*函数已弃用,将从以后的版本中删除.
请参阅本教程:PDO与MySQLi:您应该使用哪个?
另外,请参阅有关SO的文章:如何在PHP中阻止SQL注入?