Я пытаюсь оптимизировать свои запросы, и у меня есть следующий код:
<?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 для правильного использования синтаксиса
около ‘УДАЛИТЬ ИЗ СТОЛБА, иначе ноль конец LIMIT 0, 25’ в строке 1
Я понимаю, что есть синтаксическая ошибка, но мой главный вопрос заключается в том, почему оператор case работает, когда я помещаю целые числа в условие, но оператор delete выдает ошибку. Я попытался выбрать оператор, и он работал нормально:
Select case when (Select count(*) as t from `table`) < 500 then (select count(*) from table) else null end
если ты действительно хотел сделать это с одним 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»
CASE
Заявление работает с SELECT
когда SELECT
оператор выдает одно значение (т. е. он выбирает только один столбец, а результирующий набор имеет одну строку); иначе это не работает. Очевидно, что DELETE
(или же INSERT
, UPDATE
и т.д.) никогда не работает в таком положении.