Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当总行数超过某个数字时,从表中删除所有行_Php_Mysql_Case_Sql Delete - Fatal编程技术网

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

Php 当总行数超过某个数字时,从表中删除所有行,php,mysql,case,sql-delete,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(*)

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

<?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 (DELETE FROM table) else null end
1064-您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 第1行“从表中删除”附近的null结束限制0,25

我知道有语法错误,但我的主要问题是为什么在条件中放置整数时case语句有效,而delete语句抛出错误。我尝试了一个select语句,效果很好:

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

如果您试图删除表中的所有行,只需使用TRUNCATE table

如果您试图删除表中的所有行,只需使用TRUNCATE table

如果您确实想通过单个删除来执行此操作:

请注意,正如BWS所做的那样,truncate table效率更高,但如果您确实希望通过单个删除来执行此操作,则不能使用where子句或与truncate table联接:


请注意,正如BWS所做的那样,truncate table更有效,尽管您不能使用where子句或与truncate table联接,但当SELECT语句生成单个值时,CASE语句与SELECT一起工作,即它只选择一列,而结果集只有一行;否则就不行了。显然,删除、插入、更新等操作在该位置不起作用。

当SELECT语句生成单个值时,CASE语句与SELECT一起工作,即它只选择一列,而结果集只有一行;否则就不行了。显然,删除或插入,更新etc从不在该位置工作。

您想从表中删除什么?我想删除所有行或清空表@McAdam331trucante table table name您想从表中删除什么?我想删除所有行或清空表@McAdam331trucante table table table name,但您不能对truncate使用任何条件,可以吗?他们只想在总行数大于500时清除该表。但不能对truncate使用任何条件,可以吗?他们只想在总行数大于500时清除表。如果我没有弄错,您不能对truncate table使用任何条件吗?所以对于这个特定的用例,它不起作用。@McAdam331。我想说的是。我重新表述了答案。@GordonLinoff它像一个符咒一样有效,我确实尝试了截断表,但它不起作用。谢谢你们的帮助,这是有效的,戈登,如果你能解释交叉连接的作用,这将是伟大的,以帮助别人谁从来没有听说过它的使用。也许只是我误解了。谢谢你重新措辞。我从这个问题中学到了这一点。若我没弄错的话,你们不能对truncate表使用任何条件?所以对于这个特定的用例,它不起作用。@McAdam331。我想说的是。我重新表述了答案。@GordonLinoff它像一个符咒一样有效,我确实尝试了截断表,但它不起作用。谢谢你们的帮助,这是有效的,戈登,如果你能解释交叉连接的作用,这将是伟大的,以帮助别人谁从来没有听说过它的使用。也许只是我误解了。谢谢你重新措辞。我从这个问题中学到了这一点。
Select case when (Select count(*) as t from `table`) < 500 then (select count(*) from table) else null end
delete t
     from table t cross join
          (select count(*) as cnt from table t) c
     where c.cnt > 500;