SQL选择Laravel / PHP中的限制加入

时间:2015-03-04 08:28:26

标签: php mysql laravel

我的原始查询搜索了主板,然后找到了主板的图像。但是现在,有些主板没有任何关联的图像,所以我想运行一个查询,可以找到20个带图像的独特主板。

到目前为止

代码:

$newMotherboards = Motherboards::join('images', 'motherboards.motherboard_id', '=', 'images.item_id')
    ->where('images.item_type', '=', 'motherboard')
    ->orderBy('motherboards.date_added', 'desc')
    ->take(20)
    ->get();

我甚至尝试过选择特定的结果:

$newMotherboards = Motherboards::join('images', 'motherboards.motherboard_id', '=', 'images.item_id')
    ->select('motherboards.motherboard_id', 'motherboards.name')
    ->where('images.item_type', '=', 'motherboard')
    ->orderBy('motherboards.date_added', 'desc')
    ->take(20)
    ->get();

上面代码的问题在于,当我遍历每个$ newMotherboards时,它对于存在ID的每个图像都有重复。我只想检索20个最近添加它们的独特主板,但有图像。

如果一个项目有5个图像并且它是最近添加的20个图像之一,那么它将出现我20个限制的五倍。

1 个答案:

答案 0 :(得分:2)

不同版本:

    $newMotherboards = Motherboards::join('images', 'motherboards.motherboard_id', '=', 'images.item_id')
        ->select('motherboards.motherboard_id', 'motherboards.name')
        ->where('images.item_type', '=', 'motherboard')
        ->distinct()
        ->orderBy('motherboards.date_added', 'desc')
        ->take(20)
        ->get();

Groupby版本:

    $newMotherboards = Motherboards::join('images', 'motherboards.motherboard_id', '=', 'images.item_id')
        ->select('motherboards.motherboard_id', 'motherboards.name')
        ->where('images.item_type', '=', 'motherboard')
        ->groupby('images.item_type')
        ->orderBy('motherboards.date_added', 'desc')
        ->take(20)
        ->get();