1

我今天花了很多时间尝试各种事情,但似乎都没有奏效。这是我的情况,我希望能够根据行的 ID 从专门排序的行中选择行的排名

例如,如果我的查询类似于:

SELECT id, name FROM people ORDER BY name ASC

结果如下:

身份证名称
3 安德鲁
1 鲍勃
5乔
4约翰
2史蒂夫

我想获得排名(它最终在结果中的哪一行)而不返回所有行并循环抛出它们直到我得到我想要的行(在 PHP 中)。

例如,我想选择“Steve”的“等级”,以便它返回——在这种情况下——5(不是他的 id,而是上面查询中他名字的“等级”)。

同样,我希望能够选择 ID 为 1 的任何行的排名。对于此示例,我想返回 2 的“排名”(因为在结果行中,ID 为1) 仅此而已。

我已经尽可能多地用谷歌搜索了不同的结果......要么对较大的表进行非常慢的查询,要么必须创建各种临时表和用户变量(前者我真的很想避免,后者我想我可以忍受)。

任何帮助或见解将不胜感激。

4

4 回答 4

2

像这样的东西?

SELECT Row, id, name
FROM (SELECT @row := @row + 1 AS Row, id, name
      FROM people
      ORDER BY name ASC)
WHERE Row = @SomeRowNumber

如果你想通过 ID 去,只需改变 where 子句。

于 2009-08-11T19:45:12.927 回答
2

来自artfulsoftware

SELECT p1.id, p1.name, COUNT( p2.name ) AS Rank
    FROM people p1
    JOIN people p2 
    ON p1.name < p2.name
    OR (
         p1.name = p2.name
         AND p1.id = p2.id
    )
GROUP BY p1.id, p1.name
ORDER BY p1.name DESC , p1.id DESC
LIMIT 4,1
于 2009-08-11T19:47:37.010 回答
1

试试这个:

SELECT @rownum:=@rownum+1 `rank`, p.id, p.name
FROM people p, (SELECT @rownum:=0) r
ORDER BY name ASC
于 2009-08-11T19:47:28.990 回答
0

我尝试使用此代码...可能会帮助其他人我从用户那里获得结果并为用户个人资料图片上传表格并加入它,而不是在我计算用户积分并对其进行排序之后。最后我正在检查并添加行号以供用户排名......享受它。谢谢

set @row_num = 0;
set @calp =0;
select  if(@calp=(@calp:=user.cal_points), @row_num, @row_num := @row_num + 1) as row_number,user.* from 
(select user_skills.*,users.username,upload.file_name from user_skills join users on user_skills.user_id=users.id join upload on upload.upload_id=users.profile_pic order by user_skills.cal_points desc) as user
WHERE user.skill_name LIKE  '%ph%'
于 2014-08-07T08:28:45.077 回答