$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 2017-11-02 11:25:39 +08:00
感觉你得依赖 redis,zset 效率更高一些。
|
3
dangyuluo 2017-11-02 11:29:50 +08:00
查了下,ZRANK 是 O(log(N))复杂度。
|
4
b821025551b 2017-11-02 11:31:42 +08:00
|
5
shiji 2017-11-02 14:28:47 +08:00
|
6
lyleo2010 2017-11-03 18:04:14 +08:00
实时获取排名猜测读取量很高,应该用缓存存排名。
用 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 不太友好 |