步骤1:从表中获取最大set_id。set_id不是唯一的。
select max(set_id) from mytable where ver = 6;
# assume returns 3
步骤2:从set_id为max:的表中获取结果
select * from mytable where ver = 6 and set_id = 3;
# from step 1
步骤3:重构/嵌套选择语句
select * from mytable where ver = 6 and set_id =
( select max(set_id) from mytable where ver = 6 );
有没有一种更干净的方式来写这份声明?
如何将此语句翻译为Eloquent/Fluent查询生成器?
我会写这样的语句:
SELECT * from mytable WHERE ver=6 ORDER BY set_id DESC LIMIT 1;
可以翻译为:
DB::table('mytable')->where('ver', 6)->orderBy('set_id', 'DESC')->first();
您可以创建更高级的where
子句:
DB::table('mytable')
->where('ver', '=', 6)
->where('set_id', '=', function($query)
{
$query->from('mytable')
->select(DB::raw('max(set_id)'))
->where('ver', '=', 6);
})
->get();