2012-08-15 61 views
0

我有一個名爲users競爭的MySQL表。現在,我希望能夠通過post_comp DESC, posted_last ASC製作一個選擇語句來對此表進行排序。在這種排序之後,首先返回的是#1,第二排是#2等等。但是,我想進一步採用這種方式,並返回表中特定用戶的位置。現在,每個用戶都有自己的ID,zbid。我還需要將WHERE cid=3 AND post_comp>0添加到查詢的末尾。複雜的MySQL排序的競爭位置

這是我曾嘗試:

SELECT u.zbid,u.post_comp, @curRow := @curRow + 1 AS row, IF(u.zbid=123,1,0) AS me FROM users u, (SELECT @curRow := 0) r WHERE cid=3 AND post_comp > 0 ORDER BY u.post_comp DESC, u.posted_last ASC

現在是什麼做的是返回如下: zbidpost_comprowme 其中me是1,如果它是我特別想要的行返回,否則返回0。因此,如果我正在查找zbid=123的用戶位置,它將對錶格進行分類,將所有數據返回給我,以及zbid=123的用戶所在的任何位置也將返回me=1結果。 row表示用戶在競賽中的位置。

現在,我工作正常,唯一的問題是,它返回所有這些行,我只希望它返回與me=1一行。我嘗試追加另一個ORDER BY me DESC LIMIT 1到最後,但這混亂了以前的順序,並沒有工作。還有其他建議嗎?

回答

2
SELECT * 
FROM (
    SELECT u.zbid,u.post_comp, @curRow := @curRow + 1 AS row, 
     IF(u.zbid=123,1,0) AS me 
    FROM users u, (SELECT @curRow := 0) r 
    WHERE cid=3 AND post_comp > 0 
    ORDER BY u.post_comp DESC, u.posted_last ASC 
) temp 
WHERE me=1 
+0

非常感謝:)。 – 2012-08-15 23:28:52