MYSQL SELECT DISTINCT songid,按时间顺序排序

时间:2011-07-20 14:24:35

标签: mysql select distinct

我的音乐网站主页上有一个当前的收听框,我有一个这样的表:

id,userid,songid,time

现在每次用户播放歌曲时,歌曲的id都会插入到songid字段以及时间中。所以有时我有重复的歌曲(由不同的用户插入)。

现在这是我的sql语句:

SELECT DISTINCT songid,time FROM songs ORDER BY time DESC LIMIT 10

它给了我听过的最后十首歌曲,但有时它也会返回重复的数据!我该如何解决这个问题?提前致谢

3 个答案:

答案 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上的全表扫描或完整索引松散扫描。