多対多リレーションテーブルがあり、不要な行を削除する必要があります。 lastviews
テーブルの構造は次のとおりです。2つの条件でテーブルから不要な行を削除する
| 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番目のテーブルを作成できますが、それはちょうどいい気分ではありません。 – stormbreaker
これは間違いなく、テンポラリテーブルを作成する場合です。 :) – Riedsio
これは、各 'document'と' user'(最後の10行または5行を取得するために)のINSERT文を使わずに、一時テーブルに行を挿入する方法を質問します。少なくとも、クエリをループさせてください。 – stormbreaker