Php 如何在Laravel获得最畅销的产品?
我的数据库结构:Php 如何在Laravel获得最畅销的产品?,php,sql,laravel,Php,Sql,Laravel,我的数据库结构: products -- name -- price -- qty orders -- user_id -- status ... etc order_product -- order_id -- product_id -- qty -- product_price_after_discount ( nullable ) 在以下情况下,我需要以产品的总销量获得大多数售出的产品: 订单状态==“已批准” 如果折扣后有产品价格忽略原始产品价格并计算 我错了闭嘴: $to
products
-- name
-- price
-- qty
orders
-- user_id
-- status ... etc
order_product
-- order_id
-- product_id
-- qty
-- product_price_after_discount ( nullable )
在以下情况下,我需要以产品的总销量获得大多数售出的产品:
- 订单
状态==“已批准”
- 如果折扣后有
忽略原始产品价格并计算产品价格
$topSellingProducts = Product::selectRaw('
products.id,
products.trade_name,
products.company_name
')
->leftJoin('order_product','order_product.product_id','=','products.id')
->where('status','approved')
->groupBy('products.id')
->orderByDesc('total_sales')
->get();
如果你想在计算最畅销产品时按顺序考虑数量:
DB::table('products')
->select([
'products.id',
'products.trade_name',
'products.company_name',
DB::raw('SUM(order_product.qty) as total_sales'),
DB::raw('SUM(IFNULL(product_price_after_discount, products.price) * order_product.qty) AS total_price'),
])
->join('order_product', 'order_product.product_id', '=', 'products.id')
->join('orders', 'order_product.order_id', '=', 'orders.id')
->where('orders.status','approved')
->groupBy('products.id')
->orderByDesc('total_sales')
->get();
如果您想一次考虑每一个产品,然后将<代码>和(OrthoPur.QTY)替换为TooSoalSturt >代码>计数(*)为ToalSuthSuffy.P/>但如果您要获取“最畅销”产品,为什么价格会有所不同?我看不出你选择价格栏,“最畅销”的计算应该考虑<代码> QTy < /Cord>参数吗?例如,如果在一次订单中,订购了数量为100的产品。是100次还是一次?@hthell没有一次,但是100应该*以获得产品的价格\u总计\u售出\u价格错误:(where子句中的未知列'status')我认为是因为您在订单后检查产品表,并且状态列存在于订单而不是订单产品中table@lekw见最新答案,您应该加入
订单
表格以及最后一个问题,如果我使用模型而不是(DB::table),是否有任何影响?一般来说,您应该使用模型,但在这种情况下,您只选择一些属性,并且有一些原始查询,这可能并不重要。