2009-08-11 36 views
1

今天我花了很多時間嘗試各種各樣的事情,但他們都沒有工作。這裏是我的情況,我想能夠選擇基於它的ID從具體分類排使用MySQL,我該如何選擇一個特定行的查詢結果等級?

例如某行的秩,如果我的查詢是這樣的:

SELECT id, name FROM people ORDER BY name ASC 

與結果像:

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

我想獲得排名(哪一行它的結果結束了),而無需返回所有行和循環扔他們,直到我到了一個我想(在PHP)。

例如,我想選擇'史蒂夫'的'排名',以便返回 - 在這種情況下 - 5(不是他的id,而是他的名字在上述查詢中的'排名' )。

同樣,我希望能夠選擇ID爲1的任何行的排名。對於此示例,我想返回2的「排名」(因爲那是在那裏的結果行中)是1)的ID,沒有別的。

我已經Google儘可能多地處理不同的結果......要麼對較大的表進行非常緩慢的查詢,要麼必須創建各種臨時表和用戶變量(前者我真的很想避免,後者我想我可以生活在一起)。

任何幫助或洞察力將不勝感激。

回答

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 
+0

經過一些小的更改後,這看起來確實工作得很好,以滿足我的需要。然而,另外一個複雜的情況是:在給定一組條件的情況下是否可以選擇一組行(例如,只有名稱中包含'J'的人 - 其中名稱LIKE'%j%')。 ,雖然結果字段'rank'仍然相關,但它會跳過那些名字中沒有J的數字。 – theotherlight 2009-08-11 20:14:43

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子句。

+0

它給錯誤,每一個派生表必須有它自己的別名@Brandon – 2016-08-18 07:41:02

1

試試這個:

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

這像什麼,我以前來了谷歌搜索,如果我想中的每一行的「排名」它的偉大工程我的桌子,但如果我只想要單排的排名呢? 我想是這樣

 SELECT @rownum:[email protected]+1 'rank', p.id, p.name FROM people p, (SELECT @rownum:=0) r WHERE id = 5 ORDER BY name ASC 
但是,這總會給我的秩爲1(因爲它永遠只返回一個結果)。有沒有一種方法可以根據整個查詢結果獲取單行的單個排名? 我希望這是有道理的。 – theotherlight 2009-08-11 19:54:57

+0

如何使用您的查詢獲得該特定等級的一條記錄@Plutor – 2016-08-18 07:47:02

0

我嘗試這個代碼...可以幫助其他 我從用戶得到的結果並上傳表的用戶配置文件和PIC加入它比我計算用戶點和排序後。 在最後檢查並添加用戶排名行號... 喜歡它。 感謝

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%' 
相關問題