2016-07-25 51 views
2

SQL Fiddle连接查询的伯爵在MySQL声明

我有三个数据库表,我想选择song_tag表,10个最常用的标签,我可以用下面

SELECT `tag_id`, 
COUNT(`tag_id`) AS `value_occurrence` 
FROM `song_tag` 
GROUP BY `tag_id` 
ORDER BY `value_occurrence` DESC 
LIMIT 10; 
SQL查询做

然后,我将如何从同一个查询中的标签表中获取标签名称值?它甚至有可能吗?我已经设置了一些虚拟数据和三个需要的表(链接在帖子的顶部)。

这将用于wordpress wpdb查询。我不认为有关配置设置,语言等的其他内容不会增加。

回答

1

您需要将标记表加入到结果中。所以像这样:

SELECT s.tag_id, COUNT(s.tag_id) AS value_occurrence, t.name 
FROM song_tag s LEFT JOIN tags t 
    ON s.tag_id = t.id 
GROUP BY s.tag_id 
ORDER BY value_occurrence DESC 
LIMIT 10; 
+1

嗨布兰登,那工作的一种享受谢谢你。必须等待接受答案,但会 –

+0

只是出于好奇@BrandonM我将如何去选择一个基于id的歌曲,并抓住一个查询与一首歌曲相关的所有标签? –

+0

回答下面有格式。 – BrandonM

1

回答你的评论,让我可以格式化。

我个人不知道如何在歌曲的单行中获取所有标签,但是,我们可以创建一个SELECT语句,将所有标签与不同行中的歌曲相关联。它看起来像

SELECT s.title, t.name 
FROM songs s LEFT JOIN song_tag st 
    ON s.id = st.song_id 
LEFT JOIN tags t 
    ON st.tag_id = t.id 
WHERE s.id = "123"; 
+0

是的,我不确定是否有可能获得一行中的所有标签。感谢您的帮助。 –

+0

我似乎记得它有可能吗?只是不知道如何。 – BrandonM

+0

http://stackoverflow.com/questions/1067428/combine-multiple-child-rows-into-one-row-mysql 有一种伪办法来做到这一点。虽然没有创建多个列。 – BrandonM