Удалить все строки из таблицы, когда общее количество строк превышает число

Я пытаюсь оптимизировать свои запросы, и у меня есть следующий код:

<?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

1

Решение

если ты действительно хотел сделать это с одним 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 с усеченным столом

3

Другие решения

Если вы пытаетесь удалить все строки из таблицы, просто используйте «TRUNCATE table»

1

CASE Заявление работает с SELECT когда SELECT оператор выдает одно значение (т. е. он выбирает только один столбец, а результирующий набор имеет одну строку); иначе это не работает. Очевидно, что DELETE (или же INSERT, UPDATE и т.д.) никогда не работает в таком положении.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector