投稿のデータベースがあり、それぞれにタグが付いています。これらのテーブルにはPosts
、Tags
それぞれ と という名前が付けられています。Posts_Tags
また、これら 2 つのテーブル間の多対多の関係を維持するという 3 番目のテーブルもあります。
これを行うために、投稿とタグ テーブルの両方にid
列があります。したがって、私Posts_Tags
のテーブルには、マッピングを格納するためのpostid
と列の両方があります。tagid
たとえば、タイトルに「クラス」という単語が含まれるすべての投稿を照会しています。このクエリを使用すると、これを簡単に実行できます。
SELECT * FROM Posts WHERE title LIKE '%{class}%'
ただし、タイトルに「クラス」が含まれているだけでなく、「Java」タグでタグ付けされているすべての投稿を照会したいと考えています。これは、最初に Java タグの ID を取得する 2 つの個別のクエリで行うことができます。
SELECT id FROM Tags WHERE name='Java'
次に、次のように、それを最初のクエリにプラグインできます。
SELECT Posts.*
FROM Posts
INNER JOIN Posts_Tags
ON Posts.id=Posts_Tags.postid
WHERE Posts_Tags.tagid='$java_tag_id'
AND title LIKE '%{class}%'
ただし、これを単一のクエリで実行できることはわかっていますが、方法がわかりません。結合を 1 つだけ実行する場合でも、結合について多くのことを考える必要があります。同じクエリで複数の結合を実行すると、頭が回転します。この操作を実行するには、クエリをどのように構成すればよいですか?