我有一个名为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();
以下是我想要实现的目标。要获得阴影主题位置:
答案 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
绝对要记住前进的事情!