[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: необходимо удалить последние 100 строк из таблицы
kav1
Здравствуйте, господа.

Вот есть у меня большая таблица (безо всякой сортировки, без primary), мне надо удалить из нее, допустим, последние 100 строк.

Вот первые 100 строк я, допустим, могу удалить с помощью:

DELETE FROM `table` LIMIT 100


А вот последние сто - не работает конструкция вида:

DELETE FROM `table` LIMIT 184,284
- ошибочку пишет в phpmyadmin.

Так как же все таки решить подобную проблему?
DedMorozzz
Какие поля есть
или кинь структуру

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
bestxp
а что тебе мешает удалить первые 100 строк но с конца?)
поменй порядок вывода и удали первые 100 )))
FatCat
Сначала посчитать количество строк в таблице.
SELECT COUNT(*) AS cid FROM `table`

От полученного числа отнять сотню, получится например 123654.
И это число подставить в запрос удаления:
DELETE FROM `table` LIMIT 123654, 100


_____________
Бесплатному сыру в дырки не заглядывают...
DedMorozzz
FatCat smile.gif
Если это не шутка, то идея не лучше чем таблица без индексов

Если есть таблица и она отображается, то вывод по каким-то критериям происходит. И надо определить этот критерий и отсортировать в обратном порядке

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
kav1
Попробовал по совету FatCat - получил вот ткую ошибку:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 100' at line 1


а структура у меня такая:

user posted image
Valick
mav1, в БД нет порядка, данные грубо говоря там "в навал", порядок должен создаваться при помощи ORDER BY() если у вас отсутсвует поле по которому можно провести сортировку, то у вас большие проблемы. Читайте про нормализацию таблиц и создавайте грамотную структуру БД.
Добавить в таблицу id это дело пяти минут.
___
я в принципе могу развернуть таблицу в обратную сторону и без поля для сортировки, создав сурогатное поле на момент выборки, но это те ешё костыли и лучше вам о них не знать.

_____________
Стимулятор ~yoomoney - 41001303250491
DedMorozzz
Всего 3 поля. Определить по какому полю выводит будет просто
Самый простой способ - сделай выборку с ASC
SELECT * FROM table ORDERY BY telefon ASC

Если результат совпал с тем, что выводит "по умолчанию" значит меняешь ASC на DESC и удаляешь первые 100
DELETE FROM `table` ORDER BY telefon DESC LIMIT 100 




_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
FatCat
Цитата (DedMorozzz @ 4.07.2014 - 19:25)
Если результат совпал с тем, что выводит "по умолчанию"

Предположу, что "по умолчанию" сортировка по времени добавления строк. Если раньше строки удалялись и таблица не оптимизировалась - тогда там и вовсе каша.

_____________
Бесплатному сыру в дырки не заглядывают...
kav1
Цитата (FatCat @ 4.07.2014 - 16:39)
Цитата (DedMorozzz @ 4.07.2014 - 19:25)
Если результат совпал с тем, что выводит "по умолчанию"

Предположу, что "по умолчанию" сортировка по времени добавления строк. Если раньше строки удалялись и таблица не оптимизировалась - тогда там и вовсе каша.

так и есть, по времени добавления. Блин, шо делать
FatCat
Цитата (mav1 @ 4.07.2014 - 19:53)
шо делать

Добавить еще 2 поля таблице: айдишник по инкременту (будет заполняться сам) и время (туда писать time() ).

_____________
Бесплатному сыру в дырки не заглядывают...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.