
$query="select * from info ORDER BY number DESC";
用以上方法查询获得的结果,如果得到 ID 为 6 的排名呢?
做一个投票系统用。需要根据票数实时获取排名。
1 shaweren OP $key = ''; foreach ($row as $k => $v) { if ($v['0'] == $id) { $key = $k + 1; } } return $key; |
2 dangyuluo Nov 2, 2017 感觉你得依赖 redis,zset 效率更高一些。 |
3 dangyuluo Nov 2, 2017 查了下,ZRANK 是 O(log(N))复杂度。 |
4 b821025551b Nov 2, 2017 set @rownum=0; select rownum from (select @rownum := @rownum/a> +1 as rownum,users.*from info ORDER BY number DESC) as T1 where T1.id=6; |
5 shiji Nov 2, 2017 |
6 lyleo2010 Nov 3, 2017 实时获取排名猜测读取量很高,应该用缓存存排名。 用 sql 需要嵌套子查询,需要注意索引优化,不然查询会比较慢 php 层面可以考虑 先跑一条 sql "SELECT id from info ORDER BY number DESC" 查询的结果集就是根据投票数倒数排序的 $array = [5,6,1,3,4,2]; array_search(6,$array)// 得到 key 1 那么排名就是 key+1 2 不过这样对同样票数的两个 id 不太友好 |