多対多のリレーション テーブルがあり、不要な行を削除する必要があります。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
ロジックが必要です。