2

我有一个事件表,包含基本信息和 Event.ID

然后我有多个类别,我将它们用作“标签”。

Event_Categories (stores each 'tag')
 - id
 - name

Events_Categories (links tags to event ID)
 - event_id
 - event_category_id

我需要执行一个 SQL 查询,它将返回事件信息以及所有标签。

SELECT  * FROM `events`
 JOIN (`event_categories` 
 JOIN `events_categories` ON `event_categories`.`id` = `events_categories`.`event_category_id` )  
 ON `events`.`id` = `events_categories`.`event_id` 

使用每个单独的标签多次返回“事件”。

当我 append 时GROUP BY event_categories.name,它返回不同的事件,但只显示一个标签。

我确定这已经在这里介绍过了,但是通过搜索,我找不到解决方案。

谢谢!

4

1 回答 1

4

您想用来group_concat()获取类别名称列表:

SELECT e.*, group_concat(c.name)
FROM `events` e JOIN 
     `events_categories` ec
     ON e.`id` = ec.`event_id` join
     `event_categories` c
     on ec.`event_category_id` = c.`id`
group by e.`id`;

编辑:

要将其作为外部连接来获取所有事件,即使上面没有标签,只需将其替换joinleft join

select e.*, group_concat(c.name)
from `events` e left join 
     `events_categories` ec
     ON e.`id` = ec.`event_id` left join
     `event_categories` c
     on ec.`event_category_id` = c.`id`
group by e.`id`;
于 2013-08-04T14:19:38.723 回答