Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何合并和汇总具有相同ID值的项目的某些值_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

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做这些事情是可能的。我将不得不更多地了解这一点。非常感谢!