MySQL - 拆分字段和group_concat

时间:2014-09-21 18:57:09

标签: mysql split group-concat

我需要加入两个MySQL表 - events&人们,但是当我有多个人领导同一事件时,我发现问题。

PEOPLE
=================
ID|Name  |Surname|....
--------------------
 1|John  |Lennon
 2|Paul  |McCartney 
 3|George|Harisson
 4|Ringo |Starr

是否有任何可能的方法来获得1&的连续性2,如果事件表类似于

EVENTS
=================
event |leader|....
-----------------
Picnic|1+2

我确实希望某些活动只有一个领导者,但也有一些超过2个。

有没有办法做这样的事情?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

解决问题的正确方法是拥有events表:

eventid | event
---------------
1       | Picnic

events_leaders表:

eventid | leader
----------------
1       | 1
1       | 2

然后你可以使用JOIN和GROUP_CONCAT聚合函数:

SELECT
  events.event,
  GROUP_CONCAT(CONCAT(people.surname, ' ', people.name))
FROM
  events INNER JOIN events_leaders
  ON events.eventid = events_leaders.eventid
  INNER JOIN people
  ON events_leaders.leader = people.id
GROUP BY
  events.eventid,
  events.event

但是,您可以使用FIND_IN_SET函数并获得相同的结果,但查询将会变慢,因为它在字符串上工作并且无法使用索引:

SELECT
  events.event,
  GROUP_CONCAT(CONCAT(people.surname, ' ', people.name))
FROM
  events INNER JOIN people
  ON FIND_IN_SET(people.id, REPLACE(events.leaders, '+', ','))>0
GROUP BY
  events.event