|
|
|
| Добрый день
Подскажите пожалуста можно ли удалить из базы лишние строки так чтоб в итоге остало допустим 10 штук.
ну допустим мы имеем такую таблицу
данные
1 | 1 | text
2 | 2 | text
3 | 1 | text
...............
134 | 1 | text
135 | 2 | text
136 | 5 | text
.............
|
так вот просто удаление всех записей так скажем пользователя 1 будет так
DELETE FROM table WHERE `user_id`=1
|
а как построить запрос чтобы удалялись не все записи, а все кроме 10 последних (тоесть понимаем что запись последняя по id если оно больше то соответственно запись свежее) | |
|
|
|
|
|
|
|
для: m@rchello
(18.05.2009 в 13:55)
| | хм, наверное не одним запросом.
посчитать количество запсией ($count), отсортировать и поставить LIMIT 0, $count-10 (для запроса на удаление)
не уверен что это лучший способ. но это сработает | |
|
|
|
|
|
|
|
для: m@rchello
(18.05.2009 в 13:55)
| |
DELETE FROM tbl_name WHERE id < (
SELECT MIN(id) FROM
(
SELECT id FROM tbl_name
ORDER BY id DESC LIMIT 10
) AS s
);
|
| |
|
|
|
|
|
|
|
для: Root
(18.05.2009 в 18:01)
| | спасибо. | |
|
|
|
|
|
|
|
для: Root
(18.05.2009 в 18:01)
| | Ага сейчас начал проверять что у меня получается и получилась ошибка такого вида ...
Database error in module MySQL Library
Invalid SQL: DELETE FROM m_history WHERE id < ( SELECT MIN(id) FROM ( SELECT id FROM m_history WHERE `id_user`=1 ORDER BY id DESC LIMIT 10 ) AS s ) AND `id_user`=1
Error: You can't specify target table 'm_history' for update in FROM clause
Error number: 1093
Date: 19 May 2009, 11:12:34 | |
|
|
|
|
|
|
|
для: m@rchello
(19.05.2009 в 11:24)
| | хм, а какая версия сервера?
У меня на 5.1.32 запрос ошибок не выдает. | |
|
|
|
|
|
|
|
для: Root
(19.05.2009 в 11:58)
| | на локале 5.0.45 - ошибок нет
а на хостинге 4.1.22 - выдаёт ошибки =( | |
|
|
|
|
|
|
|
для: m@rchello
(19.05.2009 в 14:56)
| | ну так разбейте на 2, делов то... | |
|
|
|
|
|
|
|
для: psychomc
(19.05.2009 в 15:04)
| | да я бы с радостью сделал 2 .... но человек которому делаю требует в 1.
потому как это будет в цикле вызываться и получится вместо 100 (грубо говоря) - 200 запросов .... а это для него сущая проблема. | |
|
|
|
|
|
|
|
для: m@rchello
(19.05.2009 в 15:07)
| | Так может не надо его в цикле вызывать? | |
|
|
|
|
|
|
|
для: m@rchello
(19.05.2009 в 15:07)
| | странный случай.
я так понял, у вас например в таблице 1000 записей. Вы выбрали на удаление 990 последних. осталось десять. один раз. а цикл зачем?
или там постраничка? | |
|
|
|
|
|
|
|
для: psychomc
(19.05.2009 в 17:34)
| | там условие по id_user | |
|
|
|
|
|
|
|
для: Root
(19.05.2009 в 17:45)
| | ааа, точно, первичный просто id | |
|
|
|
|
|
|
|
для: Root
(19.05.2009 в 17:45)
| | всё верно ....
Всем спасибо ... озадачил службу потдержки поставили необходимую версию базы. | |
|
|
|