使用Laravel的查询构建器实现每组greateast N.

时间:2013-11-27 12:53:04

标签: laravel laravel-4 greatest-n-per-group fluent query-builder

问题是在第二个INNER JOIN上实现嵌套查询:

SELECT a, b, c
FROM t1
INNER JOIN t2 ON t2.b = t1.b
INNER JOIN (
    SELECT a, max(c) AS d FROM t3 GROUP BY a
) AS t3 ON ( t3.a = t1.a AND t3.d = t1.c )

我在join()函数的闭包上尝试了很多测试,但它似乎只适用于嵌套的地方。

我发现on SO我的SQL命令可以用其他表单编写,更容易用查询构建器编写,但不那么简单。所以我想知道上面的SQL查询是否仍然可以用Laravel4的Query Builder编写。

1 个答案:

答案 0 :(得分:1)

这很有趣。

$products = DB::table('t1')
    ->select('a', 'b', 'c')
    ->join('t2', 't2.b', '=', 't1.b')
    ->join(DB::raw('(SELECT a, max(c) AS d FROM "articles" GROUP BY a) AS t3'), function($join)
    {
        $join->on('t3.a', '=', 't1.a');
        $join->on('t3.d', '=', 't1.c');
    })
    ->toSql();

echo $products;

它正在为我正确输出,但在你加入t3的内容中加入了一些括号。我不认为它对你有任何影响。您可能需要将"articles"更改为articles,因为我认为这不会正常工作。