Php 使用where和order by语句时从数据库获取行号
好的,我已经尝试了几种方法,但都不起作用,所以我没有代码可以显示。但我会尽我所能解释这一点 我有一个竞赛脚本,我想添加一行,显示用户在当前获奖名单下的位置。所以我想让桌子看起来像这样Php 使用where和order by语句时从数据库获取行号,php,mysql,Php,Mysql,好的,我已经尝试了几种方法,但都不起作用,所以我没有代码可以显示。但我会尽我所能解释这一点 我有一个竞赛脚本,我想添加一行,显示用户在当前获奖名单下的位置。所以我想让桌子看起来像这样 ----------------------------------------- | Place | User | Prize | Completed | | 1 | Someuser1 | $5.00 | 5 | | 2 | Someuser2 | $2.50 |
-----------------------------------------
| Place | User | Prize | Completed |
| 1 | Someuser1 | $5.00 | 5 |
| 2 | Someuser2 | $2.50 | 3 |
| 3 | Someuser3 | $1.25 | 2 |
| 20 | You | --- | 1 |
-----------------------------------------
我拥有所谓someusers的一切,但我希望能够计算当前正在查看页面的用户在竞赛中所处的位置。我可以运行什么样的查询来获取当前用户所在的位置
我希望这在没有代码的情况下是有意义的
表结构
Column | Type | Null | Default
--------------------------------------
id |int(11)| No |
username |text | No |
completed|int(11)| No |
好吧,据我所知,有两种方法可以考虑
# First query to get top three
if ( user not in top three) {
$db->prepare('SELECT whatever FROM table WHERE user = ?')->execute(array($user));
}
编辑:比尔的答案似乎更好:)有几种方法可以做到这一点。一种是计算有多少行的排名高于给定行:
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';
选择COUNT(*)作为位置t*
从表t
左外连接t.Prize上的表t2 有地方,你需要张贴至少你的桌子是什么样子。特别是User
列的来源。忽略我之前的评论;我想我现在知道了。@Prash我想知道它正在查看页面的用户的位置值。我想这应该属于计算行数的范畴,但我以前从未尝试过类似的方法。@Brunoveira我以为你说的是表结构,如果是的话,我已经添加了结构above@kira423正是这样,,dumb me试图向你索要你的表结构这似乎只有当奖品与用户在同一个表中时才有效?@kira423回答的人可能写了你老师教你MySQL的书,并在某种程度上帮助我使用MySQL服务器(通过percona调优),所以我甚至没有想到他的答案,因为肯定是correct@kira423,是的,我正在对表格结构进行假设,但OP的描述并不完整。您没有提供足够的信息。询问StackOverflow问题的最佳方式是具体说明您希望发生什么,您尝试了什么(显示代码),以及结果如何不是您期望的结果。建议你提出一个新问题。
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';