2011-02-13 82 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 '%....%適當的標籤記錄。這很脆弱,因爲您總有可能會有一個標籤(例如「漿果」),它是另一個標籤(例如「草莓」)中的容器。有辦法解決這個問題,但是他們並不漂亮,也不是很專業。

稍微更正確的(!,同樣未經測試)的解決方案是在初始的查詢作爲子查詢中你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,但我不知道它。