mysql удаление старых записей одним запросом оставивь только Х последних

M
На сайте с 20.08.2004
Offline
376
2175

Добрый день.

Предположим есть табица с какими-то данными,

user_id1

user_id2

как удалить одним запросом mysql все записи с user_id = 1 начиная с Х в обратном направлении.

начиная со старых

1 2

1 3

1 4

1 5

2 1

2 2

2 3

2 4

1 6

1 7

1 8

1 9

Надо что бы осталось, нпример 5 последних записей user_id=1

1 5

1 6

1 7

1 8

1 9

спасибо.

интересует возможное решенеие только на mysql

отец сыночка, лапочки дочки и еще одного сыночка
Jurgen s
На сайте с 21.05.2008
Offline
153
#1

delete from table WHERE user_id <= x

хотя нет, жтот вариант вам не подойдет

вам нужно завести в таблице автоинкрементное поле и удалять по нему

добавьте поле id которое будет автоинкрементное, тогда все будет гораздо проще.

сейчас тоже можно это решить. сначала определиться с ортировкой, потом посчитать общее количество записей, потом удалить нужное.

select count(*) FROM table

delete from table LIMIT x

где х это значение предыдущего запроса за минусом того сколько хотите оставить

http://police-ua.com/ (http://police-ua.com/) Форум сотрудников МВД Украины
S2
На сайте с 07.01.2008
Offline
83
#2

delete from table where user_id1=1 and user_id2<5

M
На сайте с 20.08.2004
Offline
376
#3

спасибо за ответы.

что-то я не понимаю наверное но решения ни одного не увидел.

даже если бы было поле айди, не понимаю как оно может помочь.

user_id1=1 and user_id2<5 = а это вообще из другой серии.

A
На сайте с 04.11.2007
Offline
89
#4
Miracle:
даже если бы было поле айди, не понимаю как оно может помочь.

Очень помог бы.

DELETE FROM table WHERE user_id1=1 AND id NOT IN (

SELECT id FROM table WHERE user_id1=1

ORDER BY новые вверху

LIMIT сколько оставить

)

---------- Добавлено 29.08.2015 в 12:08 ----------

Если БД поддерживает ROWID, то можно через него и без айди

edogs software
На сайте с 15.12.2005
Offline
775
#5
Miracle:
Добрый день.
Предположим есть табица с какими-то данными,

user_id1
user_id2

как удалить одним запросом mysql все записи с user_id = 1 начиная с Х в обратном направлении.

начиная со старых
1 2
1 3
1 4
1 5
2 1
2 2
2 3
2 4
1 6
1 7
1 8
1 9

Надо что бы осталось, нпример 5 последних записей user_id=1
1 5
1 6
1 7
1 8
1 9

спасибо.

интересует возможное решенеие только на mysql

Получаете количество.

select count(*) from table where user_id=1 order by id

Удаляете

delete from table where user_id=1 order by id desc limit (количество-5)

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
V
На сайте с 24.08.2015
Offline
7
#6
Miracle:
Надо что бы осталось, нпример 5 последних записей user_id=1

У mysql нет понятия последней записи. Строки могут в любом порядке располагаться. Чтобы отследить, какая запись последняя, нужно использовать ключ с автоинкрементом, либо сохранять время.

Click here to get the best VPS Hosting from $5/mo + $10 free credit (https://goo.gl/DUPLZv)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий