2017-08-31 8 views
0

このmysqlステートメントは、ユーザーによってフラグが立てられていない投稿を取得します。このMYSQL文を実行する良い方法はありますか?

今のように、私はフラグ付きポストIDを取得していて、そのIDのセットにポストを取得していません。

SELECT * FROM posts WHERE posts.id NOT IN 
(SELECT p2.id FROM posts p2 LEFT JOIN flagged_posts 
ON flagged_posts.user_id = ? WHERE flagged_posts.post_id = p2.id) 

は、私はちょうど1つの選択と一つに参加して、たとえば、これを行うには良い(速い)方法は、おそらくそこにあると感じ、私はあなたが句EXISTSを使用してこれを行うことができます

+0

テーブル構造を表示すると、自分の答えを最適化できます –

答えて

0

を確認していません。

SELECT * FROM posts 
WHERE 
    NOT EXISTS 
     (SELECT 1 
     FROM flagged_posts 
     WHERE flagged_posts.post_id=posts.post_id AND flagged_posts.user_id=?) 

LEFT OUTER JOINを使用してこれを行うこともできます。

SELECT * 
FROM posts 
LEFT OUTER JOIN flagged_posts ON posts.post_id = flagged_posts.post_id 
AND flagged_posts.user_id=? 
WHERE flagged_posts.post_id IS NULL 
関連する問題