Удалить из таблицы все записи, начиная с n-й

  • Автор темы Автор темы ZN
  • Дата начала Дата начала

ZN

Новичок
Удалить из таблицы все записи, начиная с n-й

есть таблица, ну, скажем, host_id и time
берём конкретный host_id - для него нужно оставить только первые n записей (сортировка определяется полем time)

идея была откопировать во временную таблицу, потом удалять, используя её в подзапросе - но в подзапросах нельзя использовать LIMIT
думал замутить что-то с курсорами - что-то ничего хорошего на ум не приходит...

ну и есть вариант "в тупое" - выполнить столько запросов на удаление, сколько есть различных host_id - но хочется чего-то получше

вобщем, кто что подскажет?
 
ZN
Для чего это нужно? Какая практическая задача решается?

-~{}~ 09.02.07 19:16:

но в подзапросах нельзя использовать LIMIT
Какая версия MySQL? В свежих версиях лимит в подзапросах работает. И даже если у тебя не работает лимит в подзапросе, его всегда можно проэмулировать в пхп.
 
alpine
это имеет значение? вобще я не люблю вопросы "а зачем это нужно?", "а вы уверены, что хотите этого?" - я не буду отвечать, иначе тред сведётся к тому, что мне нужно поставить слэк+интербэйз+руби и перестать есть мясо

версия 5.0.22

что значит проэмулировать из пхп? как это пхп эмулирует LIMIT?
 
ZN
что значит проэмулировать из пхп? как это пхп эмулирует LIMIT?
Эмулирует не пхп а ты. Тоесть первым запросом(с лимитом) ты вытягиваешь данные которые подставляешь во второй запрос delete в выражение where.
 
как вариант вставить в (новую|временную) таблицу только то что нужно, (удалить|очистить) старую (переименовать новую|вставить из временной)
 
[SQL]
SET @cnt = 0;
SELECT *
FROM (SELECT @cnt:=@cnt+1 AS rowNum, tableName.* FROM tableName where ... ORDER BY ...) AS numTable
WHERE rowNum >= startNum AND rowNum < startNum+N;
[/SQL]

если нигде не ошибся то этот запрос уже можно ставить в подзапрос примерно вида DELETE FROM table WHERE id IN (...подзапрос...)
 
Сверху