1
我有3個表格來創建一個標籤系統(cds,cds_tags,tags),我想顯示具有用戶提交的特定標籤列表的行。雖然我得到正確的結果,但它只顯示與用戶搜索標籤匹配的標籤。搜索標籤並顯示全部
SELECT cds.TITLE , GROUP_CONCAT(tags.TAG_NAME SEPARATOR ',')
FROM cds
JOIN cds_tags ON cds_tags.CD_ID = cds.ID
JOIN tags ON tags.TAG_ID = cds_tags.TAG_ID
WHERE tags.TAG_NAME IN (*the tags the user searches for*)
GROUP BY cds.TITLE
HAVING COUNT(DISTINCT tags.TAG_NAME) = *the count of searching tags*
我想獲取cd的所有標籤,而不僅僅是用戶搜索的標籤。
更新:儘管更改WHERE子句以查找具有鏈接到他們的標記的所有cds.IDs,如由逗留者建議的,首先解決了問題,並且我可以獲取cd的所有標記,但它沒有' t在所有標籤都鏈接到CD的情況下獲得結果。 例如當我搜索帶有標籤的CD時:rock,house ..我將所有帶有2個標籤的CD和以前的標籤中的至少1個鏈接起來。有沒有辦法解決它?
更新2: 問題是HAVING COUNT()以外的子查詢。正確的查詢是
SELECT cds.TITLE , GROUP_CONCAT(tags.TAG_NAME SEPARATOR ',')
FROM cds
JOIN cds_tags ON cds_tags.CD_ID = cds.ID
JOIN tags ON tags.TAG_ID = cds_tags.TAG_ID
WHERE cds.ID IN
(
SELECT sct.CD_ID
FROM cds_tags sct
JOIN tags st ON st.TAG_ID = sct.TAG_ID
WHERE st.TAG_NAME IN (*the tags the user searches for*)
HAVING COUNT(DISTINCT tags.TAG_NAME) = *the count of searching tags*
GROUP BY sct.CD_ID
)
GROUP BY cds.TITLE
非常感謝您的快速反應! –