我的表格如下所示
<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数组但我不知道从哪里开始
答案 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'));