PHP 怎么获取指定信息的排名?

2017-11-02 10:52:42 +08:00
 shaweren

$query="select * from info ORDER BY number DESC";

用以上方法查询获得的结果,如果得到 ID 为 6 的排名呢?

做一个投票系统用。需要根据票数实时获取排名。

2869 次点击
所在节点    PHP
7 条回复
shaweren
2017-11-02 11:17:03 +08:00
$key = '';

foreach ($row as $k => $v) {
if ($v['0'] == $id) {
$key = $k + 1;
}
}

return $key;
dangyuluo
2017-11-02 11:25:39 +08:00
感觉你得依赖 redis,zset 效率更高一些。
dangyuluo
2017-11-02 11:29:50 +08:00
查了下,ZRANK 是 O(log(N))复杂度。
b821025551b
2017-11-02 11:31:42 +08:00
set @rownum=0;
select rownum from (select @rownum := @rownum +1 as rownum,users.*from info ORDER BY number DESC) as T1 where T1.id=6;
shiji
2017-11-02 14:28:47 +08:00
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 不太友好
jeff0819
2017-11-06 15:39:10 +08:00
select (@i:=@i+1) i,info.* from info, (select @i:=0) t2 ORDER BY number DESC

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/402859

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX