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
我有以下数据库结构:
事件
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
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