У меня есть таблица отношений «многие ко многим», и мне нужно УДАЛИТЬ ненужные строки.
Структура таблицы lastviews
:
| user (int) | document (int) | time (datetime) |
В этой таблице регистрируются последние пользователи, просмотревшие документ. (пользователь, документ) является уникальным. Я показываю только последние 10 просмотров документа и до сих пор я удалял ненужные, как это:
DELETE FROM `lastviews` WHERE `document` = ? AND `user` NOT IN (SELECT * FROM (SELECT `user` FROM `lastviews` WHERE `document` = ? ORDER BY `time` DESC LIMIT 10) AS TAB)
Однако теперь мне нужно также показать последние 5 документов, которые пользователь просмотрел. Это означает, что я больше не могу удалять строки, используя предыдущий запрос, потому что он может удалить необходимую мне информацию (скажем, пользователь не просматривал документы в течение 5 минут, а строки удаляются)
Подводя итог, мне нужно удалить все записи, которых нет в результатах этих 2 запросов:
SELECT ... FROM `lastviews` WHERE `document` = ? ORDER BY `time` DESC LIMIT 10
и
SELECT * FROM `lastviews` WHERE `user` = ? ORDER BY `time` DESC LIMIT 0, 5
Мне нужна логика.