当总行数超过数字时,从表中删除所有行

时间:2014-12-31 16:47:29

标签: php mysql case sql-delete

我正在尝试优化查询,并且我有以下代码:

<?php
$counter = mysql_query("SELECT COUNT(*) AS c FROM table");
$row = mysql_fetch_array($counter);
$count = $row["c"];
if($count>500){
mysql_query("DELETE FROM table");
}
?>

我尝试使用以下语法作为测试,但它有效:

Select case when (Select count(*) as t from `table`) > 500 then 1 else 2 end

但这会引发错误:

Select case when (Select count(*) as t from `table`) > 500 then (DELETE FROM table) else null end
  

1064 - 您的SQL语法出错;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近'DELETE FROM table else null end LIMIT 0,25'at line 1

我理解存在语法错误,但我的主要问题是为什么case语句在我将整数放入条件时起作用,但delete语句会抛出错误。我尝试了一个select语句,它运行良好:

Select case when (Select count(*) as t from `table`) < 500 then (select count(*) from table) else null end

3 个答案:

答案 0 :(得分:3)

如果真的希望使用单个delete执行此操作:

delete t
     from table t cross join
          (select count(*) as cnt from table t) c
     where c.cnt > 500;

请注意(如BWS所做的那样)truncate table效率更高,尽管您不能使用where子句或join使用truncate table

答案 1 :(得分:1)

如果您尝试删除表中的所有行,只需使用&#34; TRUNCATE表&#34;

答案 2 :(得分:0)

CASE语句在SELECT语句生成单个值时(即,它只选择一列,结果集只有一行),SELECT语句与DELETE一起使用;它不起作用。显然,INSERT(或UPDATE,{{1}}等)永远不会在该位置上运作。