MySql中的排名逻辑问题

傍神

遵循SO中发布的一些示例(即一张表中的多个等级)之后,我尝试将这种方法应用于自己的情况,但未获得预期的结果。这是我的查询:

  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

这是输出:

在此处输入图片说明

我想做的是按成员id将记录分组,然后在这些组中按event_date和id(事件的ID)按降序显示记录。但是显然发生的是,每次League_id更改时,排名都会一直在成员记录集中重置,即使我没有在select子句中的查询中的任何地方都包含League_id。这里到底发生了什么?

moni_dragu

当我在联接表上使用这种方法时,我遇到了同样的问题,因此我不得不对其进行调整。我使用子查询来构建所需的输出,并对结果应用等级计算:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章