Вопрос

У меня есть столик со многими отношениями, и мне нужно удалить ненужные ряды. То 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

Мне нужна логика.

Это было полезно?

Решение 2

Я закрываю этот вопрос. Я не нашел ответ, который я искал, но закончился, делая это другим способом. Я решил удалить эти записи, которые находятся в 2 дня, поэтому в базе данных не будет никаких неиспользованных строк.

Другие советы

Может ли или в вашем запросе решить вашу проблему?

что-то вроде этого:

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) OR 'user' NOT IN (SELECT * FROM (SELECT 'user' FROM `lastviews` WHERE `user` = ? ORDER BY `time` DESC LIMIT 0, 5) AS TAB))

так что он должен удалить только записи, которые не содержатся в двух, выберите, что вам нужно

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top