2016-04-07 249 views
3

我有兩個表,其看起來類似於下面的表1 &表2.I想出來把類似於表3Mysql的逗號分隔值

Table 1 

ParticipantsId | Description | Duration 
1,2     Demo  60 mins 
1     Test  25 mins 
1,2,3,4    Alpha  30 mins 
4,5,6,2    MCQ   120 mins 

表2

UserId | Name | Age 
    1  Aku  21 
    2  Greg  18 
    3  Denver  24 
    4  Mike  22 
    5  Sid  24 
    6  Sriten  19 

我想要的出把要

表3

users     | Description | Duration 
Aku,Greg     Demo   60 
Aku      Test   25 
Aku,Greg,Denver,Mike  Alpha   30 
Mike,Sid,Sriten,Greg  MCQ   120 

我已經試過find_by_set,組和其他各種可能性,但我不能夠獲得所需要的結果,請大家幫

+3

不要以逗號分隔值存儲數據就是答案。這隻會導致你很多麻煩。 – jarlh

+0

@jarlh所以沒有解決這個問題? –

+0

對不起,我不會碰那個爛攤子...... – jarlh

回答

4

您可以使用GROUP_CONCAT()FIND_IN_SET()在一起:

SELECT 
    GROUP_CONCAT(t2.`name`) AS users, 
    t1.Description, 
    CAST(t1.Duration AS UNSIGNED) AS Duration 
FROM 
    table1 t1, 
    table2 t2 
WHERE 
    FIND_IN_SET(t2.userID, t1.ParticipantsId) 
GROUP BY 
    t1.Description, 
    CAST(t1.Duration AS UNSIGNED) 

結果是:

+----------------------+-------------+----------+ 
| users    | Description | Duration | 
+----------------------+-------------+----------+ 
| Greg,Denver,Aku,Mike | Alpha  |  30 | 
| Greg,Aku    | Demo  |  60 | 
| Greg,Mike,Sid,Sriten | MCQ   |  120 | 
| Aku     | Test  |  25 | 
+----------------------+-------------+----------+ 
4 rows in set 

但是,您必須考慮數據結構的規範化,逗號分隔值是一個不好的做法,因爲有人提到過。

+2

這個查詢是針對sql標準的,只有在沒有設置sql模式的完整組時纔會運行。但是,它在較新版本的mysql中默認設置。 – Shadow

+0

@Shadow完全同意,但沒有辦法使用任何標準方法'加入'這些表格。 – mitkosoft

+2

不,我不是在談論加入,我是在談論團隊:)加入使用解決問題的mysql函數。但是,在你所在的小組中只列出了描述,而不是持續時間。 – Shadow