Php 如何合并和汇总具有相同ID值的项目的某些值
所以我有两张桌子<代码>订单和Php 如何合并和汇总具有相同ID值的项目的某些值,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,所以我有两张桌子订单和订单项。关系是每个订单可以有许多orderitem(orderitem只是一个产品) OrderItem表 id INT PRIMARY KEY name TEXT quantity INT pack_value INT order_id INT FOREIGN KEY REFERENCES ORDER_ID ON ORDERS TABLE product_id INT FOREIGN KEY REFERENCES PRODUCT_ID ON PRODUCTS TABLE
订单项
。关系是每个订单可以有许多orderitem(orderitem只是一个产品)
OrderItem表
id INT PRIMARY KEY
name TEXT
quantity INT
pack_value INT
order_id INT FOREIGN KEY REFERENCES ORDER_ID ON ORDERS TABLE
product_id INT FOREIGN KEY REFERENCES PRODUCT_ID ON PRODUCTS TABLE
订单表
order_id INT PRIMARY KEY
status TEXT
user_id INT FOREIGN KEY REFERENCES USER_ID ON USERS TABLE
订单可以具有相同的OrderItem两次或仅一次。例如,如下所示,3个项目,但2个产品:
OrderItem(id=1, product_id=100, name="Pizza", quantity=2, pack_value=10, order_id=7)
OrderItem(id=2, product_id=100, name="Pizza", quantity=10, pack_value=1, order_id=7)
OrderItem(id=3, product_id=555, name="Olives", quantity=5, pack_value=1, order_id=7)
上面有两个比萨饼的条目,这是我得到的结果。但是我希望它只显示一个比萨饼条目,因为它是同一个项目。下面是我想看到的:
OrderItem(product_id=100, name="Pizza", quantity=30, pack_value=1, order_id=7)
OrderItem(product_id=555, name="Olives", quantity=5, pack_value=1, order_id=7)
因此,本质上,如果项目只存在一次,那么对它不做任何处理。如果存在两次,则将pack\u值设为1
,数量为单个数量*pack\u值的总和。因此,在上面的示例中,数量变为(2*10+10*1=30)
控制器方法如下所示,我想在这里执行此操作:
public function showOrderDetails(Order $order){
return view('orders.show', compact('order'));
}
另外,Order
和OrderItem
模型也具有关系的方法。例如,在订单模型中,我有:
public function orderItems(){
return $this->hasMany(OrderItem::class, 'order_id');
}
谢谢,如果你需要任何额外的信息,我可以提供
SELECT name,
SUM(quantity * pack_value) AS quantity,
1 AS pack_value,
order_id
FROM order_items
GROUP BY name,
order_id;
将其他表合并到此代码中,并将其用作子查询,或者根据需要将它们添加到FROM子句中(调整其输出列表和分组表达式)。share db FIDLE for thesame@aRvi小提琴中没有pack\u值
,下面插入您提到的示例数据是我想看到的,解释如何将quantity=2
和quantity=10
折叠为quantity=30
。@Akina(2*10+10*1=30)
当两个项目相同时,它是每个项目的数量*包装价值的总和。该值可以是1(作为单个销售)或多个(多包装值)。这很好,谢谢你的例子。在过去的一天里,我一直都不知道用SQL做这些事情是可能的。我将不得不更多地了解这一点。非常感谢!