我目前正在尝试将排名等级存储在数据库中。
我需要存储歌曲按喜欢排名的位置。目前我可以像这样存储它:
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
答案 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;