Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获得行位置?_Php_Mysql_Sql - Fatal编程技术网

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中进行排序。