2011-12-11 23 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有一些问题,你的第一个解决方案要好得多 - 谢谢! –

相关问题