我有一个视频表
表格:'id'、'video_key、'周'
值:(1, 12345, 2016-01-03)、(2, 23456, 2016-01-03)、(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,....
But I actually need it to be
[id,video_key,week,rank,...] 3,3456,2016-01-03,1,.. 2,23456,2016-01-03,2,.. 1,12345,2015-01-03,3
My thought is that I need to do a subquery to get the count(*) of videos for each week, and then do something like:
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
最佳答案
只需将您的查询设为子查询并按外部查询排序即可:
select t.*
from (<your query>
) t
order by rank desc;
关于php - 如何让查询按降序排列的一组值添加排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34584322/