2016-04-07 204 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