我有一个SQLITE数据库,其中包含有关音乐文件的信息 - 例如,有专辑,曲目列(以及更多,但为了简单起见,我会将它们排除在外)。
[table SONGS]
ALBUM TRACK
A1 1
A1 2
A2 1
A2 2
A3 1
A3 2
A4 1
A4 2
我知道我可以SELECT album, track FROM songs ORDER BY random()
,但我会把这些专辑弄得像:
ALBUM TRACK
A4 2
A3 2
A2 1
A1 1
A3 1
A1 2
A2 2
A4 1
我想将订单随机化,但要将相册保存在一起,例如:
ALBUM TRACK
A3 1
A3 2
A2 1
A2 2
A1 1
A1 2
A4 1
A4 2
我该怎么做?我尝试了很多东西(附加一个SELECT DISTINCT album FROM songs ORDER BY random()
的表),但都没有。
我知道我可以在代码中这样做(我在XOJO中写作),但我想用SQLITE来做...
答案 0 :(得分:1)
我认为您只需要在随机之前通过相册订购:
SELECT album, track FROM songs ORDER BY album, random()
答案 1 :(得分:0)
最简单的方法是使用临时表(如果你想长时间播放这些歌曲,你可能不希望临时表)。 INTEGER PRIMARY KEY列自动填充自动增量值:
CREATE TEMPORARY TABLE AlbumOrder(Album, Sort INTEGER PRIMARY KEY);
INSERT INTO AlbumOrder(Album)
SELECT DISTINCT Album
FROM Songs
ORDER BY random();
SELECT Album, Track
FROM Songs
JOIN AlbumOrder USING (Album)
ORDER BY Sort, Track;