如何在插入mysql数据库之前对数组数据进行排序

时间:2017-11-01 10:57:34

标签: php mysql laravel laravel-5.4 laravel-5.5

enter image description here

我的表格如下所示

<form action="route('docaluculation')" method="POST">
    {{ csrf_field() }}
  <input type="number" name="student_score_number[]">
  <input type="number" name="student_score_number[]">
  <input type="number" name="student_score_number[]">
  <input type="number" name="student_score_number[]">
  <button>Submit</button>
</form>

当提交表单时,它只插入数字,我希望它能获得数字和数字的排序,并对它们进行排序。

在下面的图片中,id 1,2和10应该有第一个位置,即&#34; 1&#34;,然后id 3应该有第二个位置,这是2,等等。我试过我能做的但是我甚至不知道如何做到这一点,即时通讯使用查询生成器请,我已阅读for循环和PHP数组但我不知道从哪里开始

3 个答案:

答案 0 :(得分:1)

在任何控制器中都这样,

use App\YourNumbersModel;

public function sortNumbers(){

    $groupedNumbers = YourNumbersModel::get()->orderBy('number', 'desc')->groupBy('number');

    $i = 1;

    foreach($groupedNumbers as $gp){
      foreach($gp as $numberToSort){

        $DBnumber = YourNumbersModel::where('id', $numberToSort->id)->first();

        $DBnumber->position = $i;

        $DBnumber->save();
     }
     $i++;
    }

}

编辑:刚刚在这里编码,如果您有任何问题可以问我,希望您能理解我在做什么

在插入之前执行此操作可以使用完全相同的算法

public function sortNumbers($userInput){

      $groupedNumbers = collect($userInput); //collect the request input with laravel eloquent

      $groupedNumbers = $groupedNumbers->orderBy('number', 'desc')->groupBy('number');


      foreach($groupedNumbers as $gp){
          foreach($gp as $numberToSort){

            $DBnumber = YourNumbersModel::where('id', $numberToSort->id)->first();

            $DBnumber->position = $i;

            $DBnumber->save();
         }
         $i++;
        }
}

答案 1 :(得分:1)

使用排名作为职位

SET @rank=0;
    select rank,score from (select @rank:=@rank+1 AS rank,score 
    from  survey  
    order by score desc) as t2

答案 2 :(得分:0)

尝试在数据库之前排序

$scores = sort($request->input('student_score_number'));