1 回答

TA貢獻1789條經(jīng)驗 獲得超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
現(xiàn)在我們必須將其轉(zhuǎn)換為查詢生成器
$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']);
這還沒有經(jīng)過測試,所以我希望它有效
- 1 回答
- 0 關(guān)注
- 101 瀏覽
添加回答
舉報