私は次のテーブルを持っています:
articles: id, title, content
tags: id, tag, tagCategory
tags2articles: id, idTag, idArticle
categories: id, title, someOtherFields
ページで、いくつかのタグを持つすべての記事を選択する必要があります。私はこれを使用しています:
SELECT
SQL_CALC_FOUND_ROWS a.*
FROM
articles AS a
JOIN tags2articles AS ta ON a.id=ta.idArticle
JOIN tags AS t ON ta.idTag=t.id
WHERE
t.id IN (12,13,16)
GROUP BY a.id
HAVING
COUNT(DISTINCT t.id)=3
これにより、IDが12、13、16のタグを持つすべての記事が選択され、正常に機能します。ただし、選択した記事には、1つ以上の記事にのみ固有のタグが含まれている場合もあります。
そして、ここで注意が必要な部分があります。これらのタグを使用していくつかのフィルターを作成したいので、上記の記事にあるすべての個別のタグを選択するために別のクエリが必要です。このようなもの:
╔═══════╦══════╦═══════════╦════════════════╗
║ TagID ║ Tag ║ Category ║ SomeOtherField ║
╠═══════╬══════╬═══════════╬════════════════╣
║ id1 ║ tag1 ║ category1 ║ field1 ║
║ id2 ║ tag2 ║ category2 ║ field2 ║
║ id3 ║ tag3 ║ category1 ║ field1 ║
║ id4 ║ tag4 ║ category3 ║ field3 ║
╚═══════╩══════╩═══════════╩════════════════╝