使用Laravel让学生在考试中获得位置科目

时间:2018-02-17 15:20:55

标签: mysql laravel-5.3

我有一个名为results的表,其中包含以下列ID,Reg Number,Name,Subjects,Programs,Year,Term,score。我希望学生获得每个科目的职位,其中Programs = Art and year = 2017,Term = 1。

        $getResults = DB::table('results')
        ->leftjoin(DB::raw('((SELECT regNumber, score, programmes,term,year, subject_position from 
        (SELECT regNumber, score, programmes,term,year, subject_position,
            CASE WHEN @prevRank = score THEN @curRank WHEN @prevRank := score THEN @curRank := @curRank + 1 END AS subject_position FROM results p, 
            (SELECT @curRank :=0, @prevRank := NULL) r2  

                          where programmes ="'.$getProgramme.'" and  `year` = "'.$getLevel.'" and term = "'.$getTerm.'"
                          and year = "'.$getYear.'" ORDER BY score Desc) as t3 )'), function($joinn)
        {
            $joinn->on('regNumber', '=', 'results.regNumber')                    

        })      

        ->where('programmes',$getProgramme)
        ->where('year',$getYear)
        ->where('term',$getTerm)
        ->where('level',$getLevel)
        ->get();

以下是我想要实现的目标。要获得阴影主题位置:

Below is the what i want to achieve. To get the shaded subjectpositions.

1 个答案:

答案 0 :(得分:0)

假设您使用了Eloquent,您将代表您的实体:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Result extends Model
{
    protected $fillable = [
        'Reg Number',
        'Name',
        'Subjects',
        'Programmes',
        'Year',
        'Term',
        'score',
        'Subject Postion',
    ];
}

请注意,我使用的是与您发布的图片相同的列名。 由于它们与查询列不一致,因此我选择了图像,因为它有关于表模式的更多信息。

所以对于你的查询:

  

我希望学生获得每个科目的职位   艺术和年份= 2017年和期限= 1。

你可以这样做

Result::where('Programmes', 'Art')
    ->where('year', 2017)
    ->where('Term', 1)
    ->get()
    ->pluck('Subject Postion');

请再次注意,我使用的是与示例中相同的列名称和值。

我可能会对列名称进行标准化,因为我觉得它可能会引起混淆,并且可能无法帮助您思考。小写的snake_case将是我的方式。 e.g:

registration_number, name, subject, programme, year, term, score, subject_position

绝对要记住前进的事情!