多个选择两个表 - 多列内容

时间:2014-04-13 11:38:14

标签: mysql sql

我有两个表,我想将它们组合起来作为输出以获得不同的值,我将很快解释它。

表1 - 用户频道列表:user_id, channel_list

User_id是nr。 user_idchannel_list包含用户观看的频道。

让我们说这些频道是例如:

CNN, NBC, Eurosport, MTV and so on....

表2 - 频道排序 - 包含列 - channelnbc, cnn, euro sport, MTV....和列Sort,包含频道类型 - 例如 - news, sport, entertainment等等......这就是频道的特征。

CNN,NBC就是新闻,MTV就是音乐......

表1的结构:User_id101(示例)和channel_listCNN, NBC, MTV ....(示例)

我应该从表1中获取每个用户从表2中引用新闻的所有频道,并输出用户nr。 1观看可以说2个频道有内容新闻,但将它们视为1个新闻,对于所有其他具有相同内容的频道都相同。

如果用户在表2中观看了3个被定义为运动频道的频道,那么我应该将它们定义为User nr。 1 - 观看体育比赛,但无论他观看多少内容体育频道,都将其视为一次性体育频道。

最后,全球结果应类似于:

user 1 - sport, news, music
user 2 - news
user 3 - music

我应该为所有用户列表执行操作,这意味着输出应该导致所有用户和渠道主题。

如果它还不够清楚,那么我很乐意回答更多问题。

表2:

列:user_iddateDay(year)channel_list

"1006","2011-10-24","24","ProSieben,ZDF"
"1007","2011-06-24","24","9Live,DSF,Eurosport,ZDF"
"1008","2011-10-31","31","RTL,ZDF"
"101","2011-06-24","24","RTL,RTL2,ZDF"
"1010","2011-07-29","29","3sat,ZDF"
"1011","2011-07-14","14","KabelEins,ProSieben,SAT1,ZDF"
"1012","2011-04-29","29","DasErste,N24,NTV,RTL,SAT1,VOX,ZDF"
"1013","2011-05-18","18","KIKA,ProSieben,RegioTV,ZDF"
"1014","2011-09-07","7","DSF,ZDF"

表1:

列:channelsort of channel

HSE24, Extra shopping
KIKA, children
Viva, children
DeluxeMusic, music
MTV, music 
NDR, regional
CNN, news
OnTV, news
BloombergTVEurope, news
BBCWorldNews, news
EuroNews, news
NTV, news

我试过这个:

  SELECT p.user_id, 
         s.sort 
    FROM table2 p 
    JOIN table1 s 
      ON s.channel = GROUP_CONCAT(p.channel_list) 
GROUP BY user_id

1 个答案:

答案 0 :(得分:1)

建议您将表格结构从channel_list更改为channel_id作为INT字段,并将每个条目设置为单个条目,如下所示:

1006,"2011-10-24",24,13
1006,"2011-10-24",24,14
1007,"2011-06-24",24,15
1007,"2011-06-24",24,16
1007,"2011-06-24",24,17
1007,"2011-06-24",24,14
1008,"2011-10-31",31,18
1008,"2011-10-31",31,14
101,"2011-06-24",24,18
101,"2011-06-24",24,19
101,"2011-06-24",24,14
1010,"2011-07-29",29,14
1010,"2011-07-29",29,20

然后您可以轻松地检索数据:

  SELECT p.user_id, 
         GROUP_CONCAT(DISTINCT s.sort) AS `sort`
    FROM table2 p 
    JOIN table1 s 
      ON s.id = p.channel_id
GROUP BY user_id

使用DISTINCT,您不会重复sort并且通过将每个频道放在自己的行和唯一ID上,您可以轻松地将两个表关联起来,而不是将聚合列表放在一行中,因为你正在使用数据库,所以这没有用。

Here is a live DEMO