Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何编写有说服力的查询来检索具有max版本的多行?_Php_Laravel_Eloquent - Fatal编程技术网

Php 如何编写有说服力的查询来检索具有max版本的多行?

Php 如何编写有说服力的查询来检索具有max版本的多行?,php,laravel,eloquent,Php,Laravel,Eloquent,我想编写一个查询来检索特定组的最大版本的行 例如: 英语基础有4个版本测试id:1,2,4,7。但是我想找回一个最大版本的 有了这个,我还想检索max版本的其他类似记录 我想要这个结果 Mom基本20 1版本ID:5 Mom中级30 1版本ID:6 英语基础20 5版本ID:7 谢谢,如果您有任何疑问,请告诉我 以下是我尝试过的: 我得到了SQL查询: SELECT *, MAX(`version`) FROM `test` GROUP BY `test_name`,`sub_category`

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

例如: 英语基础有4个版本测试id:1,2,4,7。但是我想找回一个最大版本的 有了这个,我还想检索max版本的其他类似记录

我想要这个结果

Mom基本20 1版本ID:5 Mom中级30 1版本ID:6 英语基础20 5版本ID:7 谢谢,如果您有任何疑问,请告诉我

以下是我尝试过的:

我得到了SQL查询:

SELECT *, MAX(`version`) FROM `test` GROUP BY `test_name`,`sub_category`,`test_type`
但我不能正确地用laravel编写它,因为语法错误

以下是我的laravel尝试:

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

另外,不要担心逗号或引号的格式,因为我尝试了所有的组合。只是不知道写代码是什么请试试这个

Mysql

拉维尔


我没有试过这个。但我认为你能做到。你所说的独特是什么意思还不清楚

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

以下是我找到的解决方案:

$test=DB::selectDB::raw 从测试a中选择* 内部联接选择测试类型、测试名称、子类别、MAXversion作为MAXversion 按测试类型、测试名称、子类别b列出的测试组 a.测试类型=b.测试类型 a.test_name=b.test_name a.sub_category=b.sub_category a.version=b.maxversion


如果你能做到这一点,那么请把它贴在这里,没有办法轻松地把它翻译成雄辩的。此外,您还需要将config->database文件中的sql strict设置为false才能运行此操作,因为它与group by有一些问题

告诉我们您尝试了什么,以及您面临的问题。措辞非常混乱,如何定义max version(最大版本)?max version(最大版本)是该列中一组特定行的最大值,例如1-English-Basic等组有许多记录,但我想要具有最新/max版本的记录。我已经知道,但这只给出一条记录。我想用max-version$maxValue=DB::table'test'->max'version'检索多个记录$rows=DB::table'test'->其中'version',$maxValue->get;
$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"));
Test::where('version', Test::max('version'))->get(); 
$maxVersion = Test::orderBy('version', 'desc')->first(); // gets the whole row