mysql按列值按列值排序

时间:2014-06-03 19:55:36

标签: php mysql sql laravel eloquent

我试图弄清楚如何根据laravel中的2个不同列号进行排名,但原始mysql会这样做。我有一个视频列表,这些视频在竞赛中,如果有人喜欢这个视频,则会获得投票。每个视频都有一个投票号和一个竞赛号。我试图根据竞争中的投票排名。所以例如下面我有比赛8,我需要基于投票的比赛中所有视频的排名。然后我需要同样的比赛5等。

  |rank|votes|competition|
  ------------------
  |  1 | 100 | 8   |
  ------------------
  |  2 |  50 | 8   |
  ------------------
  |  3 |  30 | 5   |
  ------------------
  |  1 | 900 | 5   |
  ------------------
  |  2 |  35 | 5   |
  ------------------

我尝试了各种小组和selectby方法,但似乎没有任何工作,任何想法?

2 个答案:

答案 0 :(得分:2)

在Mysql中你可以使用用户定义的变量来计算排名,case case语句检查竞争是否与前一行相同然后如果不同则将rank增加1然后分配1需要具有正确的视频排名< / p>

 SELECT t.*,
   @current_rank:= CASE WHEN @current_rank = competition 
             THEN  @video_rank:=@video_rank +1 
             ELSE @video_rank:=1 END  video_rank,
   @current_rank:=competition
FROM t ,
(SELECT @video_rank:=0,@current_rank:=0) r   
  ORDER BY competition desc, votes desc

See Demo

如果您对最后一个额外的列感到困惑,可以使用子选择

See Demo

答案 1 :(得分:0)

您可以使用窗口函数:

select
    competition, votes, rank() over (partition by competition order by votes desc) as rank
from
    table1