使用MySQL,我该如何选择一个特定行的查询结果的等级?
题
我花了相当多的时间试图今天各种各样的事情,但他们都不工作。这里是我的情况,我想能够选择基于它的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%'
不隶属于 StackOverflow