在mysql数据库中存储排名

时间:2014-09-23 10:23:31

标签: php mysql sql database mariadb

我目前正在尝试将排名等级存储在数据库中。

我需要存储歌曲按喜欢排名的位置。目前我可以像这样存储它:

SET @r=0;
UPDATE song_board_t SET song_ranking= @r:= (@r+1) ORDER BY song_likes DESC; 

这将是我每天在临时表上运行然后复制到另一个表中的内容。

我遇到的问题是,如果song_likes相等,我需要song_ranking相等,例如,如果两首歌曲各有100首,那么它们应该具有相同的排名。

目前它只计算行数,因此每个等级比前一个等级多一个。

我很好,如果其中一些需要在PHP而不是sql中完成。

任何帮助都将不胜感激。

提前谢谢

EN

1 个答案:

答案 0 :(得分:1)

您可以使用此查询执行此操作:

UPDATE song_board_t s
INNER JOIN (
    SELECT
    song, /*or whatever the primary key is*/
    @r := IF(@prev = song_likes, @r, @r + 1) as ranking,
    @prev := song_likes
    FROM
    song_board_t
    , (SELECT @r := 0, @prev := null) var_init_subquery
    ORDER BY song_likes DESC
) sq ON s.song = sq.song
SET s.song_ranking = sq.ranking;