2011-12-11 65 views
0

標題不好,希望這個例子能說明這一點。
我有一個活動。事件包含標籤。
(簡體)我告訴因此事件:如何顯示整個組,只有一個匹配時就足夠了

SELECT 
     *.event, 
     GROUP_CONCAT(tag.name) 
FROM event 
JOIN tag 
ON event.tag_id = tag.id 
GROUP BY event.id 

說我要對其進行過濾,並獲取只有那些已經tag.id事件= 2
但仍顯示整個事件,與所有它的標籤。

SELECT 
     *.event, 
     GROUP_CONCAT(tag.name) 
FROM event 
JOIN tag 
ON event.tag_id = tag.id 
WHERE tag.id = 2 
GROUP BY event.id 

這是行不通的,因爲它會顯示正確的事件細節,但其中只有它的標籤是2

我敢肯定,我失去了一些東西很簡單,是什麼呢? :-)

解我所知道的:

  1. 在稍後的時間內獲取標籤,之後我裝了事件的詳細信息。
  2. 使用內部查詢,而不是GROUP_CONCAT(tag.name)獲取當前事件代碼

似乎都「不乾淨」給我。

回答

1
SELECT 
     event.*, 
     GROUP_CONCAT(tag.name) 
FROM event 
    JOIN tag 
    ON event.tag_id = tag.id 
    JOIN event AS event2 
    ON event2.id = event.id 
    AND event2.tag_id = 2 
GROUP BY event.id 

或:

SELECT 
     event.*, 
     GROUP_CONCAT(tag.name) 
FROM event 
    JOIN tag 
    ON event.tag_id = tag.id 
WHERE EXISTS 
     (SELECT * 
     FROM event AS event2 
     WHERE event2.id = event.id 
      AND event2.tag_id = 2 
    ) 
GROUP BY event.id 
+0

由於與內查詢MySQL有一些問題,你的第一個解決方案要好得多 - 謝謝! –

相關問題