我花了相当多的时间试图今天各种各样的事情,但他们都不工作。这里是我的情况,我想能够选择基于它的ID从具体分类排一排秩

例如,如果我的查询是这样的:

SELECT id, name FROM people ORDER BY name ASC

中包含的结果:

id   name
3    Andrew
1    Bob
5    Joe
4    John
2    Steve

我想获得的等级(它在结果最终是什么行了),而无需返回所有行和循环扔他们,直到我到了一个我想(在PHP)。

例如,我想选择的“史蒂夫”,使其返回“级别” - 在这种情况下 - 5(不是他的ID,但在上面的查询中他的名字“排名”)

同样,我希望能够选择的任何行都有1的ID在这个例子中军衔,我想返回的2“等级”(因为那是什么结果行有的1的ID)而不是其他。

我Google'd像我可能有不同结果...要么具有较大的表很慢查询或不必创建各种临时表和用户变量(前者我真的想避免的,后者我想我可以住)。

任何帮助或洞察力将不胜感激。

有帮助吗?

解决方案

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

其他提示

像这样?

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

如果您想通过ID去,只是改变where子句。

尝试这种情况:

SELECT @rownum:=@rownum+1 `rank`, p.id, p.name
FROM people p, (SELECT @rownum:=0) r
ORDER BY name ASC

我尝试这个代码...可以帮助其他 我从用户得到的结果并上传表用户的个人资料相片,并加入它比我计算用户点和对他们进行排序后。 最后我检查,增加行数为排名的用户... INJOY它。 感谢

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%'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top