从表中删除不需要的行以2个标准
-
25-09-2019 - |
题
我有许多一对多的关系表,我需要删除不需要的行。
该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))
所以应该只删除未包含在这两个选择中的记录,你需要
不隶属于 StackOverflow