我有一个事件表,包含基本信息和一个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`
使用每个单独的标记多次返回“事件”。
当我追加GROUP BY event_categories.name
时,它会返回不同的事件,但只显示一个标记。
我确信这已经涵盖在这里,但搜索,我找不到解决方案。
谢谢!
答案 0 :(得分: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`;
编辑:
要将此作为外部联接来执行以获取所有事件,即使其上没有任何标记,只需将join
替换为left 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`;