sql小技巧之1:根据投票数实时排序

在做投票活动的时候,经常为遇到页面展示时需要根据投票显示当前排名情况,通过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较高的时候性能不是很好,可以采取索引的方法优化,或者实时性要求不高的情况下,可以用定时任务去实现统计,然后供查询

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值