如何编写雄辩的查询以检索具有最高版本的多行?

时间:2019-07-04 11:00:20

标签: php laravel eloquent

enter image description here

我想编写一个查询来检索特定组具有最高版本的行

例如: 英文基础版有4个版本(test_id:1、2、4、7)。但我想检索最大版本 与此同时,我还想检索其他此类最高版本的记录

我想要这个结果

  • Mom Basic 20 1(版本)(id:5)
  • 妈妈中级30 1(版本)(id:6)
  • 英语基础20 5(版本)(id:7)

谢谢,如果您有任何疑问,请告诉我


这是我尝试过的:

我得到了SQL查询:

SELECT *, MAX(`version`) FROM `test` GROUP BY `test_name`,`sub_category`,`test_type`

但是我无法在laravel中正确编写它(引发语法错误)

这是我的幼虫尝试:

$test = Test::selectRaw('*, MAX(version) GROUP BY `test_name` ')->get();
$test = Test::selectRaw('*')->groupBy('sub_category')->toSql();

以此类推

P.S。当我尝试使用所有组合时,请不要担心逗号或引号的格式。只是无法弄清楚什么是写代码

4 个答案:

答案 0 :(得分:2)

我没有尝试过这个。但我认为您可以做到。您所指的独特含义还不清楚。

Test::where('version', Test::max('version'))->get(); 

答案 1 :(得分:0)

请尝试一下

Mysql

select test_type,test_name,sub_category,time,max(version) as version 
from table_name group by test_name,sub_categoryorder by version ;

Laravel

$result=DB::select(DB::raw("select test_type,test_name,sub_category,time,max(version) as version 

 from table_name group by test_name,sub_categoryorder by version"));

Check Fiddle

答案 2 :(得分:0)

$maxVersion = Test::orderBy('version', 'desc')->first(); // gets the whole row

答案 3 :(得分:0)

这是我找到的解决方案:

$ test = DB :: select(DB :: raw(“         选择*从测试         INNER JOIN(SELECT test_type,test_name,sub_category,MAX(version)AS maxversion                     从测试GROUP BY test_type,test_name,sub_category)b         开启a.test_type = b.test_type         AND a.test_name = b.test_name         AND a.sub_category = b.sub_category         AND a.version = b.maxversion“));

如果可以的话,没有办法轻松地将其翻译成雄辩的语言,请在此处发布。另外,您还需要在config-> database文件中将sql严格设置为false才能运行此命令,因为它与group by存在一些问题