
$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 不太友好 |