2015-03-31 65 views
1

上我有一個表event與列organizer。列組織者是一組ID-Ints(f.e .:「10,920,527」)。在第二個表格(user)中,ID與名稱相關聯。MYSQL組通過劈裂陣列

我需要一個MySQL查詢,可以給我活動主辦方的名稱的字符串。 所以f.e:

SELECT event.*, group_concat(user.forname, ' ', user.surname) as real_names 
FROM event 
LEFT JOIN user ON event.organizer=user.id 
WHERE event.id='" . $get_id . "' 
GROUP BY event.id 

所以這裏現在的問題是:eventorganizer是一個數組,我想比較所有user陣列的每個值。 id's。

我不知道這是否可能在MySQL,但我認爲,如果其可能這將是更短於內爆他們在PHP中,我會需要另一個查詢來獲取所有的用戶名。

回答

1

您需要使用mysql的FIND_IN_SET功能,看看下面的代碼

SELECT event.*, group_concat(user.forname, ' ', user.surname) as real_names 
FROM event 
LEFT JOIN user ON FIND_IN_SET(event.organizer, user.id) > 0 
WHERE event.id='" . $get_id . "' 
GROUP BY event.id 

希望這會幫助你。

2

妥善地解決這一問題,需要適當地重新設計你的數據庫。

如果每個用戶都可以成爲不同事件的組織者,並且每個事件都可以由不同的用戶組織(多對多關係),您需要創建另一個(主鍵)表,如user_event:user_id,event_id。因此,要進行查詢,您需要通過event_id加入此表,然後通過user_id加入用戶表。

SELECT event.*, group_concat(user.forname, ' ', user.surname) as real_names 
FROM event 
LEFT JOIN user_event ON event.id=user_event.event_id 
LEFT JOIN user ON user_event.user_id=user.id 
WHERE event.id='" . $get_id . "' 
GROUP BY event.id