我怎样才能让这个MySQL查询2个表
问题描述:
我有2个表将用于:新闻和标签我怎样才能让这个MySQL查询2个表
消息表有相关的音乐表music_id场和标签表具有藏汉作为同一个tag_id列。它为每位艺术家保存多个标签条目。
标签看起来像这样
music_id | tag_id | user_id
3 2 7
3 3 12
9 17 52
因此,每个用户可以标记与多个标签是彼此不同的艺术家。
我想从每个新闻帖子(news.music_id)中获取music_id,并在每行中找到每位艺术家的顶部标签。
所以它会像
music_id | top_tag
22 6
15 4
13 9
22 6
15 4
之后,我想最流行的订购标签。
所以我留下了一个结果像
count | top_tag
2 6
2 4
1 9
希望这是有道理的。我真的被卡住了!
答
我正在将问题解释为“通过音乐id的数量排序标签,它们是音乐ID中最受欢迎的标签”。以下查询使用子查询来计算每个music_id
上的标记计数。它还为最终聚合找到每个`music_id'的最大计数:
select mt.tag_id, count(*) as musiccnt
from (select music_id, tag_id, count(*) as cnt
from tags t
group by music_id
) mt join
(select music_id, max(cnt) as maxcnt
from (select music_id, tag_id, count(*) as cnt
from tags t
group by music_id
) mt
group by music_id
) m
on mt.music_id = m.music_id and mt.cnt = m.maxcnt
group by mt.tag_id
order by musiccnt desc
其中是表标记和第三个表? –
你说你想在每一行找到每位艺术家的top_tag。你打算如何确定哪个是顶级标签?你还说你想按照受欢迎程度排列top_tags。你如何定义人气?你能否澄清这些方面? – dseibert
对不起,我无法解释它。标签表格中每个艺术家有多个标签。一个简短的例子是我的第一个代码片段。 每位艺术家都可以使用无限量的不同标签进行标记,以及同一标签的多个标签。 我想要做的是从新闻表中获取music.id,并找到music.id最受欢迎的标签。所以最受欢迎的标签将是music_id旁边的条目最多的标签。 因此,对于新闻表中的每个帖子,还有一列包含了艺术家最受欢迎的标签。 –