2

私は2つのテーブルを持っています:

  1. 1 つは私のメンバーからのすべての投稿を保持し、

  2. もう1つは投稿のIDと、ページで投稿を非表示にするユーザーIDを保持します

非表示テーブルにない投稿を除くすべての投稿を選択するにはどうすればよいですか?

疑似ステートメントの例...

"SELECT * FROM posts WHERE NOT IN (他のテーブル)"

これは私がこれまでに持っているものです

SELECT * FROM `acmPosting` LEFT JOIN `hidePosts` ON acmPosting.id = hidePosts.postID WHERE `sender`='$userID' OR `recip`='$userID' OR `sender` IN ($friendsArray) OR `recip` IN ($teamsArray) AND hp.id IS NULL ORDER BY `timeSent` DESC LIMIT 10
4

5 に答える 5

5

2番目のテーブルがpostHidesであり、両方のテーブルにpostId列があると仮定します。

SELECT * FROM posts WHERE postId NOT IN (SELECT postId FROM postHides)
于 2013-02-13T06:32:02.213 に答える
2

他のテーブルに名前が付けられhide_list、その中の外部キーposts.idであるとしfk_post_idます。次に、selectステートメントは次のようになります。

SELECT posts.* from posts,hide_list WHERE NOT posts.id=hide_list.fk_post_id;

より最適化されたソリューションは次のとおりです。

SELECT posts.* from posts,(SELECT fk_post_id from hide_list) hide_list WHERE NOT posts.id=hide_list.fk_post_id;
于 2013-02-13T06:39:09.447 に答える
2
SELECT post.* FROM post LEFT JOIN foo ON post.id = foo.post_id WHERE foo.post_id IS NULL
于 2013-02-13T06:33:29.863 に答える
2

これは反結合と呼ばれ、次を使用して同等である必要がありますNOT IN(ただし、クエリプランは異なります)。

SELECT *
FROM posts p
LEFT JOIN hiddenPosts hp on hp.id = p.id
WHERE hp.id IS NULL
;

詳細については、この記事を参照してください:NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL

于 2013-02-13T06:33:30.483 に答える
2
"SELECT * FROM posts WHERE post_id NOT IN (select post_id from other_table)"
于 2013-02-13T06:42:28.113 に答える