加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 16:19:29 所属栏目:PHP教程 来源:网络整理
导读:好的我已经尝试了几种方法来做到这一点,但没有一个工作,所以我没有代码显示.但我会尽力解释这一点. 我有一个比赛脚本,我想添加一行,向用户显示他们在当前获奖者名单下的位置.所以我希望桌子看起来像这样. -----------------------------------------| Place
好的我已经尝试了几种方法来做到这一点,但没有一个工作,所以我没有代码显示.但我会尽力解释这一点.

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

-----------------------------------------
| 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';

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读