如何使查询按DESCENDING顺序按一组值添加排名

时间:2016-01-04 03:30:06

标签: php mysql sql

我有一个视频表

表格:' id',' video_key,'周'

:( 1,12345,2016-01-03),(2,23456,2016-01-03),(3,3 3456,2015-01-03)等。 ..

周'将永远是一些星期日日期,每个星期'可以有任意数量的视频。

我试图提出一个查询按周排序视频的问题' DESC,并且具有降序(递减?)排名。我可以使用以下内容按照递增的顺序获取视频 - 但这不是我需要的结果。

  SELECT tt.*, rank FROM ( SELECT t.*, @week:=
    CASE WHEN @week = week
    THEN  @rank:=@rank +1
    ELSE @rank:=1
    END  rank,
  @week:=t.week
  FROM video_table t ,
    (SELECT @rank:=0,@week:=0) r
  ORDER BY week DESC, id ASC
  ) tt

返回类似

的内容
  
[id,video_key,week,rank,...]
1,12345,2016-01-03,1,..
2,23456,2016-01-03,2,..
3,3456,2016-01-03,3,....

但实际上我需要它

[id,video_key,week,rank,...]
3,3456,2016-01-03,1,..
2,23456,2016-01-03,2,..
1,12345,2015-01-03,3

我的想法是我需要做一个子查询来获取每周视频的计数(*),然后执行以下操作:

CASE WHEN @week = week
THEN  @weekly_count_of_videos:=@weekly_count_of_videos -1
//....etc

我希望这一切都有意义....感谢任何提示,或指示实现这一目标。

基于Gordon Linoff回答的更新查询

SELECT t3.* FROM
(SELECT t2.* FROM ( SELECT t1.*, @week:=
    CASE WHEN @week = week
    THEN  @rank:=@rank +1
    ELSE @rank:=1
    END  rank,
  @week:=t1.week
  FROM video_table t1 ,
    (SELECT @rank:=0,@week:=0) r
  ORDER BY week DESC, id ASC
  ) t2)
  t3
  order by week DESC, rank desc

1 个答案:

答案 0 :(得分:1)

只需将查询作为子查询并按外部查询:

select t.*
from (<your query>
     ) t
order by rank desc;