別のテーブルに複数の行があるかどうかに基づいて、投稿テーブルから行をロードしようとしています。以下のテーブル構造を取ります。
投稿
post_id post_title
-------------------
1 My Post
2 Another Post
投稿タグ
post_tag_id post_tag_name
--------------------------
1 My Tag
2 Another Tag
投稿タグ
postTag_id postTag_tag_id postTag_post_id
------------------------------------------
1 1 1
2 2 1
当然のことながら、post と post_tags は投稿とタグを格納し、postTags はどの投稿がどのタグを持っているかを結合します。
テーブルを結合するために通常行うことは次のとおりです。
SELECT * FROM (`posts`)
JOIN `postTags` ON (`postTag_post_id` = `post_id`)
JOIN `post_tags` ON (`post_tag_id` = `postTag_tag_id`)
次に、タグに関する情報を取得し、後でクエリに追加して検索語などのタグ名を検索し、検索語に一致する投稿を取得したらグループ化します。
私がやろうとしているのは、投稿にタグ 1 とタグ 2 の両方が含まれている投稿からのみ選択することであり、そのための SQL を解決できません。上記の結合を実行すると、明らかに2行が返されるため、WHERE句を使用するのではなく、実際のJOINで実行する必要があると思います。
WHERE post_tag_id = 1 AND post_tag_id = 2
各行には post_tag_id が 1 つしかないため、1 つの行で同じ列の異なる値を確認することはできません。
私がやろうとしたことは次のようなものです:
SELECT * FROM (`posts`)
JOIN `postTags` ON (postTag_tag_id = 1 AND postTag_tag_id = 2)
JOIN `post_tags` ON (`post_tag_id` = `postTag_tag_id`)
しかし、これを実行すると0の結果が返されます。私は以前、同様のことのためにこのような条件を JOINS に入れました。近いと確信していますが、これが機能しない場合はどうすればよいかわかりません。
私は少なくとも正しい軌道に乗っていますか?うまくいけば、私は明らかな何かを見逃していません。
ありがとう。