gpt4 book ai didi

mysql - 搜索标签并显示所有

转载 作者:行者123 更新时间:2023-11-30 23:06:24 24 4
gpt4 key购买 nike

我有 3 个表来创建标签系统(cds、cds_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 并按照 linger 的建议将标签链接到它们首先解决了问题并且我可以获得 cd 的所有标签,但它没有获得所有标签都链接到 CD 的结果。例如当我搜索带有标签的 CD 时:摇滚、房子 .. 我得到所有带有 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

最佳答案

如何更改您的 WHERE 子句以查找所有具有标签链接的 cds.ID:

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* )
)
GROUP BY cds.TITLE
HAVING COUNT( DISTINCT tags.TAG_NAME ) = *the count of searching tags*

关于mysql - 搜索标签并显示所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21681427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com