【发布时间】:2015-09-26 00:21:54
【问题描述】:
是否可以在进行左连接时限制结果?
(Laravel 4.2) - 查询构建器
我使用 laravel 的 querybuilder 得到以下查询:
DB::table('part')
->leftjoin('model', 'model.model_id', '=', 'part.model_id')
->leftjoin('make', 'model.make_id', '=', 'make.make_id')
->leftJoin('photo', 'photo.part_id', '=', 'part.part_id')
->select( 'part.part_id',
'part.model_id',
'make.desc as make_desc',
'model.desc as model_desc',
'photo.local as local_img',
'photo.cdn as cdn_img')
->take(8)->get();
每个部分都有超过 4 张照片,但我只希望第一张照片包含在连接中。问题是当我使用这个查询时,我得到 8 个部分对象(结果)。但是 8 个结果不是 8 个部分,而是 2 个部分。该查询创建了 4 个相同的部分对象,唯一的区别是照片(连接包括每张照片)。
我尝试过这样的事情:
->select( '(photo.local LIMIT 1) as local_img',
'(photo.cdn LIMIT 1) as cdn_img')
但这不起作用。我也尝试做原始查询。我还尝试在 leftjoin 闭包中使用“->take(1)”,如下所示:
->leftjoin('photo', function($q){
$q->on('photo', 'photo.part_id', '=', 'part.part_id')->take(1);
});
但这是不可能的。
我正在寻找一种解决方案,只在 leftjoin 中包含第一张照片行。
编辑:跟进 mgrueter 的回答。我知道 groupby 可以解决问题,但这会使查询非常慢。所以我想以不同的方式来做,这样查询就不会变慢。
【问题讨论】:
-
我相信您正在寻找的是 groupby。我会尝试在 part.part_id 上使用 group by
标签: php mysql laravel laravel-4