我有两个表,我想将它们组合起来作为输出以获得不同的值,我将很快解释它。
表1 - 用户频道列表:user_id, channel_list
。
User_id
是nr。 user_id
和channel_list
包含用户观看的频道。
让我们说这些频道是例如:
CNN, NBC, Eurosport, MTV and so on....
表2 - 频道排序 - 包含列 - channel
:nbc, cnn, euro sport, MTV....
和列Sort
,包含频道类型 - 例如 - news, sport, entertainment
等等......这就是频道的特征。
表1的结构:User_id
:101
(示例)和channel_list
:CNN, 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_id
,date
,Day(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:
列:channel
,sort 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
答案 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上,您可以轻松地将两个表关联起来,而不是将聚合列表放在一行中,因为你正在使用数据库,所以这没有用。