mysql中多行的动态列

mysql中多行的动态列,mysql,Mysql,我有一个保存客户详细信息的表格: customer cid| name | email | and so on.. 1 annu .... 2 rita .... 3 tina .... 事件表保存不同的事件: eid | name 1 abc 2 xyz 3 pqr 现在,一个客户可以对多个活动感兴趣。 事件分配表如下所示: eid |cid 1 1 2 1 3 2 2 3 cid

我有一个保存客户详细信息的表格:

customer
cid|  name |  email  | and so on..
1    annu   ....
2    rita   ....
3    tina   ....
事件表保存不同的事件:

eid | name       
1     abc
2     xyz
3     pqr
现在,一个客户可以对多个活动感兴趣。 事件分配表如下所示:

eid |cid
1     1
2     1
3     2
2     3
cid | cat_id | date     | eid | edition
1      1       2/2/2015   1      v1
1      2       3/2/2015   2      v1
2      3       3/2/2015   3      v1
1      2       4/2/2015   1      v2
2      2       4/2/2015   3      v1
1      1       5/2/2015   1      v2
接下来是包含所有目录类型的目录表

cat_id | cat_name
1        food
2        clothing
3        accessories..
现在,根据客户感兴趣的事件将目录发送给每个客户,发送目录的详细信息保存在cat_sent表中,如下所示:

eid |cid
1     1
2     1
3     2
2     3
cid | cat_id | date     | eid | edition
1      1       2/2/2015   1      v1
1      2       3/2/2015   2      v1
2      3       3/2/2015   3      v1
1      2       4/2/2015   1      v2
2      2       4/2/2015   3      v1
1      1       5/2/2015   1      v2
现在,目录被发送给各个活动的客户。正如您所看到的,一个目录可以发送给具有相同活动但版本不同的同一客户。 现在我想要的是通过连接上面所有的表得到如下输出

cid | eid |   food                    |   clothing    | accessories etc.. 
1     1     **2/2/2015-v1/5/2/2015-v2**    4/2/2015-v2      null 
1     2      null                         3/2/2015-v1       null
2     3      null                         4/2/2015-v1     3/2/2015-v1
目录名称应该是动态列,日期和版本作为它们的值与按客户ID和事件ID分组的分隔符“-”连接在一起。 如果具有相同事件的客户有多个相同的目录,则应使用分隔符“/”对其进行分组和连接,如上图所示(cid->1带eid->1和两个相同的cat_id)


如果缺少任何目录的数据,则应将其显示为空。

请查看以下答案:您需要的是数据透视表。在这里搜索它。关于这件事有很多问题和答案。