У меня есть база данных, содержащая все обновления контента для сайта, управляемого CMS. Я хочу создать запрос, который очистит все старые вещи, но оставит мне последние несколько (5) копий каждой страницы (на всякий случай). Таблица содержит поле TIMESTAMP и поле PAGE ID, чтобы помочь мне найти правильные строки. PrimaryKey - это поле с именем RevisionId. Конечно, есть и другие поля (например, содержащие содержимое страницы), но они не имеют отношения к этому вопросу.
У меня нормально работает этот запрос:
SELECT RevisionId
FROM `content`
WHERE PageId='55'
ORDER BY Timestamp DESC LIMIT 5;
Возвращает пять записей, которые я хочу сохранить.
Я думал, что смогу вложить это так:
DELETE
FROM `content`
WHERE PageId='55'
AND RevisionId NOT IN (
SELECT RevisionId
FROM `content`
WHERE PageId='55'
ORDER BY Timestamp DESC LIMIT 5 );
... но это дает мне ошибку:
# 1235 - Эта версия MySQL еще не поддерживает подзапрос «LIMIT & IN / ALL / ANY / SOME»
Я использую MySQL 5.
Вопрос из двух частей:
- Что мне нужно сделать, чтобы устранить ошибку, которую я получаю до сих пор?
- Есть ли способ дополнительно автоматизировать это, чтобы запустить через мой
вся таблица ... не только PageId = '55 '
но все разные номера PageId?