php – 在使用where和order by语句时从数据库获取行号

好的我已经尝试了几种方法来做到这一点,但没有一个工作,所以我没有代码显示.但我会尽力解释这一点.

我有一个比赛脚本,我想添加一行,向用户显示他们在当前获奖者名单下的位置.所以我希望桌子看起来像这样.

-----------------------------------------
| Place |    User   | Prize | Completed |
|   1   | Someuser1 | $5.00 |     5     |
|   2   | Someuser2 | $2.50 |     3     |
|   3   | Someuser3 | $1.25 |     2     |
|   20  |    You    |  ---  |     1     |
-----------------------------------------

我拥有所谓的某些用户的一切,但我希望能够计算当前正在查看该页面的用户可以看到他们在比赛中的位置.我可以运行什么样的查询来获取当前用户所在的位置.

我希望没有代码就行.

表结构

    Column   |  Type | Null |  Default
--------------------------------------
    id       |int(11)|  No  |   
    username |text   |  No  |   
    completed|int(11)|  No  |   

最佳答案 有几种方法可以做到这一点.一个是计算有多少行的排名高于给定的行:

SELECT COUNT(*) AS Place, t.*
FROM TheTable t
LEFT OUTER JOIN TheTable t2 ON t.Prize < t2.Prize
GROUP BY t.id
HAVING Place <= 3 OR user = 'You';

另一种方法是使用会话变量来跟踪排名:

SELECT * FROM (
  SELECT (@row := COALESCE(@row, 0)+1) AS Place, t.*
  FROM TheTable t
  ORDER BY Prize DESC) r
WHERE Place <= 3 OR user = 'You';
点赞