我的音乐网站主页上有一个当前的收听框,我有一个这样的表:
id,userid,songid,time
现在每次用户播放歌曲时,歌曲的id都会插入到songid字段以及时间中。所以有时我有重复的歌曲(由不同的用户插入)。
现在这是我的sql语句:
SELECT DISTINCT songid,time FROM songs ORDER BY time DESC LIMIT 10
它给了我听过的最后十首歌曲,但有时它也会返回重复的数据!我该如何解决这个问题?提前致谢
答案 0 :(得分:4)
如果时间是上次播放歌曲的日期时间,您可以将每个歌曲的最后一次分组:
SELECT songid,MAX(time)
FROM songs
GROUP BY songid
ORDER BY time DESC
LIMIT 10
答案 1 :(得分:4)
您希望汇总songid
:
SELECT songid, MAX(time) AS most_recent_time
FROM songs
GROUP BY songid
ORDER BY most_recent_time DESC
LIMIT 10
答案 2 :(得分:1)
SELECT *
FROM songs s
WHERE id =
(
SELECT id
FROM songs si
WHERE si.songid = s.songid
ORDER BY
si.songid DESC, si.time DESC, si.id DESC
LIMIT 1
)
ORDER BY
time DESC, id DESC
LIMIT 10
创建以下索引:
songs (songid, time, id)
songs (time, id)
让它快速工作。
与GROUP BY songid
解决方案不同,这不需要songs
上的全表扫描或完整索引松散扫描。