MySQL 从 select 中的相关 table 添加名称数组

MySQL add array of names from the related table in select

我有以下数据库结构:

事件

id
name
description

event_activities

event_id
activity_id

活动

id
name

我想添加 sphinx 搜索活动,其中应包括所有相关活动:

SELECT name, description, 
[Some SQL Magic that builds an array or string of names] as activities 
from events

因此,活动变量可以是数组 ['name1'、'name2'] 或字符串 'name1 | name2 | name3',以防输入 activity 名称之一, 它可以将包含此 activity 的所有事件都包含到搜索结果中。

谁能帮我弄清楚[魔法]部分

使用 IN

将表格连接在一起并 select 来自活动

https://dev.mysql.com/doc/refman/5.7/en/any-in-some-subqueries.html

SELECT events.name, events.description 
FROM activities, event_activities, events 
WHERE activities.id=event_activities.activity_id 
    AND events.id=event_activities.event_id 
    AND activities.name in ('NAME1', 'NAME2', 'NAME3')
GROUP BY events.id

了解 GROUP_CONCAT() 函数。

SELECT e.name, e.description, GROUP_CONCAT(a.name) AS activities
FROM events AS e
LEFT OUTER JOIN event_activities AS ea ON ea.event_id = e.id
LEFT OUTER JOIN activities AS a ON ea.activity_id = a.id
GROUP BY e.id