php - 如何获得行位置?

标签 php mysql sql

<分区>

Possible Duplicate:
MySQL get row position in ORDER BY
Calculating rank in PHP/MySQL

我有一个用 php 编写的游戏系统,每个用户有 X 金额。 我有一个页面显示网站中最富有的用户。

$ranking = mysql_query("
    SELECT * 
    FROM users 
    ORDER BY money DESC 
    LIMIT 10
");

现在我想给每个用户他在列表中的位置。 我不能选择所有信息并开始排序只是为了获得一个值,这是一种资源浪费。 如何选择行的位置(其中 userid = X)?

(MySQL)

最佳答案

这是使用相关子查询执行此操作的简单标准方法:

SELECT *, (SELECT count(*) + 1 FROM users WHERE money > u.money) as MoneyRank
FROM users AS u
WHERE username = 'X'

这是一个SqlFiddle demo .

这确实会遇到任何性能问题 "triangular join" (SQL Server 文章,但仍然适用)然而。我最初仍然会以这种方式自己实现它(这很简单),然后在存在性能问题时建立索引,如果不够好,则继续使用其他预先计算/缓存的选项。评论还提到了其他可行的解决方案。

关于php - 如何获得行位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13144900/

相关文章:

PHP - 回显 'Array' 错误

mysql - 如何将 DISTINCT 与 JOIN 结合使用?

sql - 组上的 Amazon Redshift Sum 窗口函数

mysql - QGIS 无法连接 MySQL

php - 无法将 uniqid() 值插入 MySQL 数据库

php - 从 HTML 表单中选取动态值并将其存储在 PHP 变量中

php - Javascript onclick 与 getElementById 不起作用

php - 如何获取外部网站的基本 URL

php - 在 javascript .replace 中使用正则表达式翻译 preg_replace

mysql - 为 DueDate 和 DueTime 字段为不同列的表更新大于今天日期和时间的记录