MySql 中的排名逻辑问题
Problems with Rank logic in MySql
遵循 SO 中发布的一些示例,即这个 Multiple ranks in one table,我尝试将这种方法应用于我自己的情况,但我没有得到我期望的结果。这是我的查询:
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
这是输出:
我想做的是按 memberid 对我的记录进行分组,然后在这些组中按 event_date 和(事件的)id 降序显示记录。但显然发生的是,每次 league_id 更改时,排名都会在成员记录集中重置,即使我没有在查询中的任何地方包含 league_id 除了 select条款。这到底是怎么回事?
我在连接表上使用这种方法时遇到了同样的问题,所以我不得不调整它。我使用子查询构建所需的输出并对结果应用排名计算:
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
遵循 SO 中发布的一些示例,即这个 Multiple ranks in one table,我尝试将这种方法应用于我自己的情况,但我没有得到我期望的结果。这是我的查询:
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
这是输出:
我想做的是按 memberid 对我的记录进行分组,然后在这些组中按 event_date 和(事件的)id 降序显示记录。但显然发生的是,每次 league_id 更改时,排名都会在成员记录集中重置,即使我没有在查询中的任何地方包含 league_id 除了 select条款。这到底是怎么回事?
我在连接表上使用这种方法时遇到了同样的问题,所以我不得不调整它。我使用子查询构建所需的输出并对结果应用排名计算:
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