PHP 怎么获取指定信息的排名?
$query="select * from info ORDER BY number DESC";
用以上方法查询获得的结果,如果得到 ID 为 6 的排名呢?
做一个投票系统用。需要根据票数实时获取排名。
----------------------- 以下是精选回复-----------------------
答:$key = '';
foreach ($row as $k => $v) {
if ($v['0'] == $id) {
$key = $k + 1;
}
}
return $key;
答:感觉你得依赖 redis,zset 效率更高一些。
答:查了下,ZRANK 是 O(log(N))复杂度。
答:或者在 SQL 上处理排名:
类似于这样的:
https://dba.stackexchange.com/questions/13703/get-the-rank-of-a-user-in-a-score-table
答:实时获取排名猜测读取量很高,应该用缓存存排名。
用 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 不太友好
0条评论