Php 如何获得行位置?
可能重复:Php 如何获得行位置?,php,mysql,sql,Php,Mysql,Sql,可能重复: 我有一个用php编写的游戏系统,每个用户有X笔钱。 我有一个页面可以显示站点中最丰富的用户 $ranking = mysql_query(" SELECT * FROM users ORDER BY money DESC LIMIT 10 "); 现在我想给每个用户在列表中的位置。 我不能选择所有的信息,并开始排序只是为了得到一个值,这是浪费资源。 如何选择行的位置(其中userid=X) (MYSQL)Rank列将是列表中的位置: SEL
我有一个用php编写的游戏系统,每个用户有X笔钱。 我有一个页面可以显示站点中最丰富的用户
$ranking = mysql_query("
SELECT *
FROM users
ORDER BY money DESC
LIMIT 10
");
现在我想给每个用户在列表中的位置。
我不能选择所有的信息,并开始排序只是为了得到一个值,这是浪费资源。
如何选择行的位置(其中userid=X)
(MYSQL)
Rank
列将是列表中的位置:
SELECT t.*,
@rownum := @rownum + 1 AS rank
FROM users, (SELECT @rownum := 0) r
ORDER BY money DESC
LIMIT 10
如果不进行全表排序,则无法轻松/快速地完成此操作。我建议你只定期给每个人一个新的排名,也许每小时一次,并以这种方式更新他们的位置 对于“排行榜”,您不会遇到这个问题,因为您将始终具有偏移和限制限制。因此,当你显示前10名(有限),你知道他们的排名1-10 然而,仅仅选择一个单独的用户,如果没有一个非常不完善的表排序,就无法做到这一点 另外,请看另一个问题(我认为这是一个几乎完全相同的问题?)
以下是使用相关子查询执行此操作的简单标准方法:
SELECT *, (SELECT count(*) + 1 FROM users WHERE money > u.money) as MoneyRank
FROM users AS u
WHERE username = 'X'
这是一本书
不过,这确实会像任何(SQLServer文章,但仍然适用)一样出现性能问题。我仍然会以这种方式来实现它(很简单),如果有性能问题,则索引,如果这还不够好,则转到其他预计算/缓存选项。评论中还提到了其他可行的解决方案。@RedFilter,对不起,我不明白你的意思。我试图编辑并添加我需要的WHERE子句,但它总是给我1,而不是正确的位置。我不介意进行全表排序,但我希望在资源中获得结果,而不是在php中进行排序。