|
|
|
| Мне нужно удалить из таблицы все записи, кроме первой двадцатки. "Первость" выясняется ORDER BY p DESC - т.е., где p более всего - двадцать строк оставить. Все остальные - удалить. По идее - как-то DELETE FROM tbl LIMIT 20,max(id) - но я не уверен. Подскажете? | |
|
|
|
|
|
|
|
для: Shorr Kan
(10.03.2006 в 11:07)
| | В delete LIMIT не имеет второго параметра, и ограничивает только количество. Задача похожа на недавно обсуждавшуюся здесь. | |
|
|
|
|
|
|
|
для: Shorr Kan
(10.03.2006 в 11:07)
| | Нет, тактика должна быть такой
DELETE FROM tbl ORDER BY p LIMIT num
|
Где num = max(id) - 20, причём max(id) предварительно вычисляется дополнительным запросом. | |
|
|
|
|
|
|
|
для: cheops
(10.03.2006 в 11:41)
| | Так мне ж не по id надо удалять... мне надо удалять тех, у кого p меньше... и оставить двадцать лидеров.
$c=mysql_fetch_array(mysql_query("SELECT COUNT(id) FROM tbl;"));
if($c[0]>100){
$a=$c[0]-100;
mysql_query("DELETE FROM tbl ORDER BY p ASC LIMIT $a;");
}
сработает ведь? | |
|
|
|
|
|
|
|
для: Shorr Kan
(10.03.2006 в 11:55)
| | Да id здесь вообще можно не использовать, т.е. использовать COUNT(*), да ваш код должен работать корректно. | |
|
|
|
|
|
|
|
для: Shorr Kan
(10.03.2006 в 11:55)
| | А что должен делать код в ситуации, когда в таблице с 15 по 25 строку p имеет одно и то же значение? | |
|
|
|
|
|
|
|
для: Trianon
(10.03.2006 в 12:42)
| | Он же всё равно его как-то отордерит, правильно? | |
|
|
|