Php 如何使用elount/Laravel执行此查询:子查询WHERE IN with GROUP BY

Php 如何使用elount/Laravel执行此查询:子查询WHERE IN with GROUP BY,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我尝试在MySQL中实现此功能,但没有成功: SELECT * FROM tableName WHERE id IN ( SELECT MAX(id) FROM tableName GROUP BY var1, var2, var3 ); 变成一个雄辩的问题。这不起作用: $output = TableName::whereIn('id', function($query){ $query->select(\DB::raw(

我尝试在MySQL中实现此功能,但没有成功:

SELECT * FROM tableName
WHERE id IN (
    SELECT MAX(id)
    FROM tableName
    GROUP BY var1, var2, var3
);
变成一个雄辩的问题。这不起作用:

    $output = TableName::whereIn('id', function($query){
                $query->select(\DB::raw(
                           'SELECT * FROM TableName WHERE id IN (
                            SELECT MAX(id)
                            FROM TableName
                            GROUP BY var1, var1, var1);'))
                })->get(); dd($output);
我希望得到与MySQL Workbench相同的输出。 请帮忙!提前感谢。

试试这个:

$output = TableName::whereIn('id', function($query){
            $query->select(\DB::raw(
                       'SELECT * FROM TableName WHERE id IN (
                        SELECT MAX(id)
                        FROM TableName
                        GROUP BY var1, var1, var1);'))
            });

dd($output->toSql(), $output->getBindings());
您将拥有纯sql及其值,请尝试以下操作:

$output = TableName::whereIn('id', function($query){
            $query->select(\DB::raw(
                       'SELECT * FROM TableName WHERE id IN (
                        SELECT MAX(id)
                        FROM TableName
                        GROUP BY var1, var1, var1);'))
            });

dd($output->toSql(), $output->getBindings());

您将拥有纯sql及其值

@techienomics您可以试试这个

$output=TableName::选择“*” ->其中,raw'id1 in通过var1、var2、var3从tableName组中选择MAXid2' ->得到;
我希望它能有所帮助。

@techienomics您可以试试这个

$output=TableName::选择“*” ->其中,raw'id1 in通过var1、var2、var3从tableName组中选择MAXid2' ->得到; 希望有帮助。

你能试试这个吗

$output = TableName::whereIn('id', function($query){
            $query->select(\DB::raw('SELECT MAX(id) FROM TableName'))
                  ->groupBy(['var1', 'var1', 'var1'])
            })->get();
我不知道var1 var1是否相同。如果是相同的,那么您可以使用->groupBy'var1'

希望有帮助

你能试试这个吗

$output = TableName::whereIn('id', function($query){
            $query->select(\DB::raw('SELECT MAX(id) FROM TableName'))
                  ->groupBy(['var1', 'var1', 'var1'])
            })->get();
我不知道var1 var1是否相同。如果是相同的,那么您可以使用->groupBy'var1'


希望有帮助

那么,您在MySQLWorkbench上的输出是什么?也许向我们展示这将帮助我们帮助您。那么您在MySQLWorkbench上的输出是什么?也许向我们展示这将帮助我们帮助您。谢谢Jovs,我想$query->select中缺少“”。Andrew的建议按预期工作:$output=TableName::select'*'->whereRaw'id1 in select MAXid2 FROM TableName group by var1、var2、var3'->get;再次感谢!感谢Jovs,在$query->select中缺少了“”。Andrew的建议按预期工作:$output=TableName::select'*'->whereRaw'id1 in select MAXid2 FROM TableName group by var1、var2、var3'->get;再次感谢!谢谢安德鲁!这对我有用。再次感谢!不客气。请做好标记,将其作为帮助他人的解决方案。谢谢Andrew!这对我有用。再次感谢!不客气。请做好标记,将其作为帮助他人的解决方案。谢谢Mateus,我无法为我完成此代码。Andrew的建议按预期工作:$output=TableName::select'*'->whereRaw'id1 in select MAXid2 FROM TableName group by var1、var2、var3'->get;再次感谢!谢谢Mateus,我不能为自己编写代码。Andrew的建议按预期工作:$output=TableName::select'*'->whereRaw'id1 in select MAXid2 FROM TableName group by var1、var2、var3'->get;再次感谢!