Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql按列值排序按列值分组_Php_Mysql_Sql_Laravel_Eloquent - Fatal编程技术网

Php mysql按列值排序按列值分组

Php mysql按列值排序按列值分组,php,mysql,sql,laravel,eloquent,Php,Mysql,Sql,Laravel,Eloquent,我正试图找出如何根据laravel中的两个不同列编号进行排名,但原始mysql就可以了。我有一个视频列表,这些视频都在比赛中,如果有人喜欢,我会给他们投票。每个视频将有一个投票号码和一个比赛号码。我正试图在竞争中根据选票进行排名。例如,下面我有第8场比赛,我需要根据投票情况确定比赛中所有视频的排名。然后我需要同样的比赛5等 |rank|votes|competition| ------------------ | 1 | 100 | 8 | ----------------

我正试图找出如何根据laravel中的两个不同列编号进行排名,但原始mysql就可以了。我有一个视频列表,这些视频都在比赛中,如果有人喜欢,我会给他们投票。每个视频将有一个投票号码和一个比赛号码。我正试图在竞争中根据选票进行排名。例如,下面我有第8场比赛,我需要根据投票情况确定比赛中所有视频的排名。然后我需要同样的比赛5等

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

我尝试了各种group和selectby方法,但似乎没有任何效果,有什么想法吗?

您可以使用窗口功能:

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

在Mysql中,您可以使用用户定义的变量来计算排名,case语句检查竞争是否与前一行相同,然后将排名增加1(如果不同),然后分配1一个order by以获得视频的正确排名

 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
如果与最后一列混淆,可以使用子选择


我想你的表中没有排名栏吧?你需要查询rightCorrect中的排名,即使我有一个排名列,我仍然需要一个查询来计算这个。啊!它工作得很好!你我的朋友是个巫师。