我有一个多对多关系表,我需要删除不需要的行。该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 分钟内没有查看文档并且行被删除)
综上所述,我需要删除所有不在这两个查询结果中的记录:
SELECT ... FROM `lastviews` WHERE `document` = ? ORDER BY `time` DESC LIMIT 10
和
SELECT * FROM `lastviews` WHERE `user` = ? ORDER BY `time` DESC LIMIT 0, 5
我需要逻辑。