php - 如何让查询按降序排列的一组值添加排名

标签 php mysql sql

我有一个视频表

表格:'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/

相关文章:

php - 我可以在不命名列的情况下显示查询结果吗?

php - javascript 太多递归?

PHP根据数组元素值对来自两个数组的值进行计算

php - 基于随机顺序的下一个和上一个MYSQL

sql - 如何识别存储在 Oracle DATE 列中的无效(损坏)值

sql - 检查约束失败

PHP 过滤文本的禁用词

php - 部分数据已经输出,无法发送PDF文件

PHP/MySQL : Data from MySQL not display in Select Option (dropdown list)

mysql - 使用 MySql 设置 Sonar