2016-10-28 93 views
0

在遵循SO中發佈的一些示例(即Multiple ranks in one table)之後,我試圖將這種方法應用於我自己的情況,但是我沒有得到我期待的結果。這裏是我的查詢:在MySql中排序邏輯的問題

select r.memberid, r.final_rating,le.event_date, le.id, le.league_id, 
(CASE r.memberid WHEN @curMember THEN @curRow := @curRow+1 ELSE @curRow := 1 AND @curMember := r.memberid END) AS rank 
from rating r 
inner join league_event le on r.league_event_id=le.id 
inner join (SELECT @curRow := 0, @curMember := 0) x 
where r.memberid IS NOT NULL 
order by r.memberid, le.event_date desc, le.id desc 

這裏是輸出:

enter image description here

我試圖做的是一羣我的記錄由MEMBERID內,然後這些組顯示的記錄event_date和id(事件)的降序。但顯然發生的情況是,每當league_id發生變化時,排名會在成員記錄集內重置,即使我的查詢中除select子句外沒有在其他任何地方包含league_id。這裏發生了什麼?

+0

您可以爲您的表添加結構和一些測試數據嗎?我寫了我的改編方法,但沒有經過測試。 –

回答

1

當我在連接表上使用這種方法時,我遇到了同樣的問題,所以我不得不調整它。我使用子查詢來構建所需的輸出並對結果應用排名計算:

SELECT rs.*,(CASE rs.memberid WHEN @curMember THEN @curRow := @curRow+1 ELSE @curRow := 1 AND @curMember := rs.memberid END) AS rank 
FROM (
    SELECT r.memberid, r.final_rating,le.event_date, le.id, le.league_id 
    FROM rating r INNER JOIN league_event le ON r.league_event_id=le.id 
    WHERE r.memberid IS NOT NULL 
    ORDER BY r.memberid, le.event_date DESC, le.id DESC 
) rs, (SELECT @curRow := 1, @curMember := 0) x 
ORDER BY rs.memberid, rs.event_date DESC, rs.id DESC