태그 시스템 (cds, cds_tags, tags)을 만들기 위해 3 개의 테이블이 있으며 사용자가 제출 한 특정 태그 목록이있는 행을 표시하려고합니다. 올바른 결과를 얻을 수는 있지만 사용자의 검색 태그와 일치하는 태그 만 표시합니다.태그를 검색하고 모두 표시
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 절을 변경하여 Linger가 제안한 태그가있는 모든 cds.ID를 찾으면 처음부터 문제가 해결되어 CD에 대한 모든 태그를 얻을 수 있지만, 모든 태그가 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
귀하의 빠른 응답 주셔서 대단히 감사합니다! –