2014-09-21 72 views
0

我需要加入兩個MySQL表 - 事件&人,但我看到問題時,我有多個人領導同一事件。MySQL - 拆分字段和組concat

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

是否有任何可能的方式來獲得的1 & 2 CONCAT,如果事件表是一樣的東西

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

我也想了一些事件,只有一個領導者,但也有一些更多的比2.

有沒有辦法做這樣的事情?

謝謝你的幫助。

+0

提供適當的表定義你是如何存儲每個事件的人民? – 2014-09-21 18:58:45

+0

你能正常化你的數據並且有一個合適的'events_leaders'表嗎? – Mureinik 2014-09-21 19:01:41

回答

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