我正在使用SAM Broadcaster来分类类别和它们包含的歌曲。
我想要的是一个5个随机艺术家的列表,随机选择他们的歌曲,没有重复的艺术家。这是我到目前为止所做的:
我有一个名为“经典”的类别:
select ID from category where name = 'Classics';
返回:11
因此,我可以获得类别列表中所有项目的列表:
SELECT artist, title
FROM songlist LEFT OUTER JOIN categorylist on songlist.id = categorylist.songID
WHERE categorylist.categoryID = 11 ORDER BY RAND();
返回:
现在我想更进一步,按照艺术家对此列表进行分组并限制5但是我想要每个标题的随机项目。现在,当我按艺术家分组时,我总是以ABC顺序获得标题。所以Seals& Crofts的“钻石女孩”总是在他们的名字显示时列出。与其他小组一样。
目标是列出此列表中的5首随机歌曲,没有重复艺术家。
答案 0 :(得分:2)
此查询应该可以解决问题(故意将类别选择放在一边以使其更具可读性):
SELECT artist,
title
FROM (SELECT artist,
title,
CASE
WHEN @artist != artist THEN @rn := 1
ELSE @rn := @rn + 1
end rn,
@artist := artist
FROM (SELECT *
FROM songlist
ORDER BY Rand()) a,
(SELECT @rn := 0,
@name := NULL) r
ORDER BY a.artist) s
WHERE rn <= 1
ORDER BY Rand()
LIMIT 5
在此处查找演示:sqlfiddle