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

ZN

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

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

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

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

вобщем, кто что подскажет?
 

alpine

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

-~{}~ 09.02.07 19:16:

но в подзапросах нельзя использовать LIMIT
Какая версия MySQL? В свежих версиях лимит в подзапросах работает. И даже если у тебя не работает лимит в подзапросе, его всегда можно проэмулировать в пхп.
 

ZN

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

версия 5.0.22

что значит проэмулировать из пхп? как это пхп эмулирует LIMIT?
 

alpine

Новичок
ZN
что значит проэмулировать из пхп? как это пхп эмулирует LIMIT?
Эмулирует не пхп а ты. Тоесть первым запросом(с лимитом) ты вытягиваешь данные которые подставляешь во второй запрос delete в выражение where.
 

asm

Пофигист
как вариант вставить в (новую|временную) таблицу только то что нужно, (удалить|очистить) старую (переименовать новую|вставить из временной)
 

flash-vkv

Новичок
[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 (...подзапрос...)
 
Сверху