我正在使用SAM广播公司,它将分类和它们所包含的歌曲分开。
我想要的是一个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顺序得到标题。因此,海豹和克罗夫茨的“钻石女孩”总是列在他们的名字显示。其他团体也一样。
目标是从这个列表中随机列出5首歌曲,没有重复的艺术家。
发布于 2015-11-02 23:31:12
这个查询应该做到这一点(有意将类别选择排除在使其更具可读性的方式之外):
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 在这里找到一个演示:木琴
https://stackoverflow.com/questions/33488127
复制相似问题