Laravel在其中一个上使用distinct来获取多列

时间:2017-08-25 18:57:27

标签: mysql laravel-5 eloquent

面部表结构:

id
photo_id
person_id

一个人可以在许多照片中。我想为每个人返回第一张照片。我试过了:

$faces = Face::select('person_id','photo_id')
        ->groupBy('person_id','photo_id')
        ->whereNotNull('person_id')
        ->get()
        ->toArray();

这将返回不同的组合,即每个人的所有照片。 Distinct只会将我选择的列作为不同列返回。我需要两个回来。

1 个答案:

答案 0 :(得分:1)

如果您只想要返回每人的第一张照片,请仅由该人分组并返回最少的照片ID。在sql中,它看起来如下:

select person_id, min(photo_id)
from yourtable
group by person_id

我对laravel并不是很了解,但是我尝试了查询的样子(你真的不需要person id不是null标准):

$faces = Face::select('person_id',DB::raw('min(photo_id) as photo_id')
        ->groupBy('person_id')
        ->get()
        ->toArray();