我最初的查询是搜索主板,然后找到主板的图像。但是现在,一些主板没有任何关联的图像,所以我想运行一个查询来找到 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 张限制的五次。
最佳答案
不同版本:
$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();
分组版本:
$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();
关于php - SQL Select Join with a limit in Laravel/PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28849719/