我有以下表格:
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 的标签的文章,并且工作正常。但是,所选文章也可能具有其他标签,这些标签可能仅特定于其中一个或多个。
棘手的部分来了:我想使用这些标签来制作一些过滤器,所以我需要另一个查询来选择上面文章所具有的所有不同标签。像这样的东西:
╔═══════╦══════╦═══════════╦════════════════╗
║ TagID ║ Tag ║ Category ║ SomeOtherField ║
╠═══════╬══════╬═══════════╬════════════════╣
║ id1 ║ tag1 ║ category1 ║ field1 ║
║ id2 ║ tag2 ║ category2 ║ field2 ║
║ id3 ║ tag3 ║ category1 ║ field1 ║
║ id4 ║ tag4 ║ category3 ║ field3 ║
╚═══════╩══════╩═══════════╩════════════════╝