2011-02-13 3 views
1

내가 연결된 목록의 태그를 사용하여 집합의 모든 태그를 반환하도록 만든 쿼리가 있지만 동일한 결과를 반환하는 쿼리를 작성하는 방법을 결정하려고합니다. 특정 태그가있는 항목에 대해서만 결과가 표시됩니다. 논리적으로, 'where tbl_tag.tag_id = 3'을 추가하면 그룹의 특정 태그 만 나열됩니다. 모든 태그를 나열 할 수 있기를 바랍니다. 가능성이 여러 쿼리는 해답이지만 하나와 함께 할 수있는 경우 궁금 해서요.sql 테이블 연결에 태그를 얻으려면

SELECT tbl_talks.*, 
     GROUP_CONCAT(tbl_tag.tag_name ORDER BY tbl_tag.tag_name) AS tags 
FROM tbl_talks 
    LEFT JOIN tbl_linking_talk_tag 
     ON tbl_talks.talk_id = tbl_linking_talk_tag.talk_id 
    LEFT JOIN tbl_tag 
     ON tbl_linking_talk_tag.tag_id = tbl_tag.tag_id 
GROUP BY tbl_talks.talk_id 

답변

0

빠른, hackish 솔루션은 외부 쿼리에서 전체 쿼리를 포장, 만 WHERE tags LIKE '%....%를 사용하여 적절한 태그를 포함하는 레코드를 반환하는 것입니다. 이는 취약합니다. 왜냐하면 항상 다른 태그 (예 : '딸기') 내에 하나의 태그 (예 : '베리')가있을 가능성이 있기 때문입니다. 이 문제를 해결하는 방법이 있지만 SQLish는 그리 좋지는 않습니다.

약간 더 정확한 (! 동등하게 검증되지 않은) 솔루션은 WHERE 절에 서브 쿼리로 원래 쿼리를 추가하는 것입니다 :

WHERE EXISTS 
(
    SELECT 
    1 
    FROM 
    tbl_talks 
    LEFT JOIN tbl_linking_talk_tag 
     ON tbl_talks.talk_id = tbl_linking_talk_tag.talk_id 
    LEFT JOIN tbl_tag 
     ON tbl_linking_talk_tag.tag_id = tbl_tag.tag_id 
    WHERE 
    tbl_tag.tag_id IN (the, tag_ids, you, want) 
) 

에서이 일을 간단한 내장 방법이있을 수 있습니다 MySQL,하지만 나는 그것을 모른다.

관련 문제