Php 如何在插入mysql数据库之前对数组数据进行排序
我有下面这样的表格Php 如何在插入mysql数据库之前对数组数据进行排序,php,mysql,laravel,laravel-5.4,laravel-5.5,Php,Mysql,Laravel,Laravel 5.4,Laravel 5.5,我有下面这样的表格 <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="stude
<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应该有第一个位置是1,然后id 3应该有第二个位置是2,等等。我尝试了我能做的,但我甚至不知道怎么做,我使用查询生成器pls,我已经阅读了循环和php数组,但我不知道在任何控制器中从何处开始
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++;
}
}
使用等级作为位置
SET @rank=0;
select rank,score from (select @rank:=@rank+1 AS rank,score
from survey
order by score desc) as t2
尝试在数据库之前进行排序
$scores = sort($request->input('student_score_number'));
这是一件很正常的事情,我们都在学习:你只能用sql来做这件事,这是一点点complex@madalinivascu谢谢,我该怎么做,我在想也许我可以用foreach获取所有的数字,然后把它们存储在某个地方,对它们进行排序,然后将它们插入数据库,但我不知道这是怎么回事,任何没有意义的想法:当您输入新数据时,位置可能会改变,因此您必须重新计算整个数据库。Laravel提供了一个帮助函数来对数组进行排序:如何使用查询生成器在不同的函数$this->db->query'SET@rank=0'中运行这两个查询$此->数据库->查询“选择排名,从选择@rank中选择得分:=@rank+1作为排名,按得分描述从调查顺序中选择得分作为t2”;