Вход

Просмотр полной версии : Удаление последних N записей из Mysql


fduch
18.06.2013, 21:35
$kolvo_mess=0;
$eres = mysql_query("SELECT * FROM `message` where id=11 ORDER BY time DESC");
while($row = mysql_fetch_array($eres))
{
$tim = $row['time']; //CURRENT_TIMESTAMP
$kolvo_mess++;
if ($kolvo_mess > 200){ mysql_query ("DELETE FROM message WHERE id = 11 and time = $tim");}

}

Нужно оставить последние 200 записей, поле тайм, заполняется автоматом,
Но команда делит в таком виде почемуто не работает. Если оставить только условие id=11, то все поля
успешно стираются) если оставить только условие time = $tim, не работает.
echo $row['time']; и echo $tim; выдают одно и тоже.

Korchy
18.06.2013, 22:39
delete from message where id=11 and time in (select * from (SELECT time FROM message WHERE id=11 order by time desc limit 200) as tbl);

wvxvw
19.06.2013, 17:59
Тут еще есть смысл подумать: что будет выгоднее, удалить Х записей, оставив У записей, или скопировать У записей в новую таблицу, trunkate/drop старую, и потом переименовать / скопировать таблицу, куда копировали У записей.
Например, если нужно оставить 200 записей из 200000, то я так думаю, что второй вариант будет очень сильно быстрее :)