Я создаю поток активности, поэтому старые сообщения падают с конца и никогда не будут видны снова. Итак, я хотел бы регулярно удалять старые сообщения. Однако я не хочу, чтобы это выглядело так, как будто у пользователя нет активности, поэтому я хочу оставить минимум X сообщений в каждом потоке.
Упрощенно, моя таблица "messages" имеет "mid" (идентификатор сообщения, первичный ключ), "uid" (идентификатор пользователя), "дата создания" (метка времени UNIX) и "message". Так что я хочу сделать что-то вроде этого:
DELETE FROM messages
WHERE created < ? AND mid NOT IN (
SELECT mid FROM messages m GROUP BY uid HAVING mid > (
SELECT mid FROM messages WHERE uid = m.uid ORDER BY mid LIMIT 1 OFFSET ?
)
)
Однако, когда я пытаюсь выполнить запрос внутри NOT IN()
, он не возвращает результатов. Кроме того, я не думаю, что он работает на SELECT
из той же таблицы, из которой вы удаляете.
Я согласен с 2 запросами, если это необходимо, но я надеюсь, что в этом нет необходимости.
Я попытался выполнить поиск и получил кучу результатов о том, как удалить все записи, кроме последней, но ничего не нашел об удалении всех записей, кроме последних N.