我需要加入两个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个。
有没有办法做这样的事情?
感谢您的帮助。
答案 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