在做投票活动的时候,经常为遇到页面展示时需要根据投票显示当前排名情况,通过mysql可以简单实现该功能。
SELECT
ID,
USER_NAME,
USER_ID,
NET_BALLOTS,
(@i :=@i + 1) AS NO
FROM
vote_user_video_info,
(SELECT @i := 0) AS it
ORDER BY
NET_BALLOTS DESC
说明:
ID为记录主键
USER_NAME为作者名称
USER_ID为作者ID
NET_BALLOTS为投票数
NO为投票排名
后来需求要求有两种排序方法,一种是按排名显示列表,另一种是按最近记录显示列表并显示对应记录的排名。
这样的话,只要在上面的sql中添加一个创建时间字段,然后再根据时间排序或者排名排序即可。
SELECT
*
FROM
(
SELECT
ID,
USER_NAME,
USER_ID,
NET_BALLOTS,
AUDIT_TIME,
(@i :=@i + 1) AS ORDER_NUM
FROM
vote_user_video_info,
(SELECT @i := 0) AS it
ORDER BY
NET_BALLOTS DESC
) AS TMP_TABLE
ORDER BY
TMP_TABLE.ORDER_NUM
不过这样的方法,在数据量很大,并且qps较高的时候性能不是很好,可以采取索引的方法优化,或者实时性要求不高的情况下,可以用定时任务去实现统计,然后供查询