1 回答

TA贡献1789条经验 获得超10个赞
您需要聚合而不是排序。对于 Laravel,这意味着将列与 DB::raw 一起传递:
$products = DB::table('products')
->orderBy('products.products_price', 'asc')
->groupBy('products.products_name')
->select(['product_name', DB::raw('min(price) as price')])
->get();
编辑ID
在这里去掉答案:SQL: Group by mini-value in one field while select different rows the mysql query will be
SELECT p1.*
FROM products p1 INNER JOIN
(
SELECT product_name, MIN(price) AS as min_price
FROM products
GROUP BY product_name
) p2 ON p1.product_name = p2.product_name AND p1.price = p2.min_price
现在我们必须将其转换为查询生成器
$products = DB::table('products AS p1')
->join(DB::raw('(
SELECT product_name, MIN(price) AS as min_price
FROM products
GROUP BY product_name
) AS p2'),
function($join)
{
$join->on('p1.product_name', '=', 'p2.product_name');
$join->on('p1.price', '=', 'p2.min_price');
})
->get(['p1.id', 'p1.product_name', 'p1.price']);
这还没有经过测试,所以我希望它有效
- 1 回答
- 0 关注
- 73 浏览
添加回答
举报