PHP中带内连接的求和
我正在使用PHP和MySQL,我需要计算加入3个表的产品总数: 订单产品:(表中有多个订单产品名称相同但金额不同) 订单:PHP中带内连接的求和,php,mysql,inner-join,Php,Mysql,Inner Join,我正在使用PHP和MySQL,我需要计算加入3个表的产品总数: 订单产品:(表中有多个订单产品名称相同但金额不同) 订单: order_id (int) order_date (varchar) order_status (varchar) product_name (varchar) product_amount (int) order_id product_name product_amount 255 p
order_id (int)
order_date (varchar)
order_status (varchar)
product_name (varchar)
product_amount (int)
order_id product_name product_amount
255 product 1 200
256 product 1 100
257 product 2 50
258 product 3 10
供应商:
order_id (int)
order_date (varchar)
order_status (varchar)
product_name (varchar)
product_amount (int)
order_id product_name product_amount
255 product 1 200
256 product 1 100
257 product 2 50
258 product 3 10
所以,我想在一行中显示我销售了多少产品,状态是发货的,以及我从供应商处订购了多少。下面两个例子中的任何一个都将帮助我实现我的目标
比如:
有没有任何例子或其他帮助,我可以做到这一点
编辑:
示例数据如下所示
订购产品:
order_id (int)
order_date (varchar)
order_status (varchar)
product_name (varchar)
product_amount (int)
order_id product_name product_amount
255 product 1 200
256 product 1 100
257 product 2 50
258 product 3 10
订单:
订单号订单日期订单状态
255 09.05.2018 Shipped
256 09.05.2018 Shipped
257 10.05.2018 Not_Shipped
258 10.05.2018 Not_Shipped
供应商:
产品名称产品金额
product 1 2500
product 2 400
product 3 600
您应该在聚合的子选择上使用联接
SELECT t1.product_name, t1.sum_order_products, t2.supplier_sum, t1.order_status
FROM (
SELECT op.product_name, SUM(op.product_amount) sum_order_products, o.order_status
FROM order_products op
INNER JOIN orders o ON op.order_id = o.order_id
WHERE o.order_status = 'Shipped'
GROUP BY op.product_name, o.order_status
) t1
LEFT JOIN (
SELECT s.product_name, SUM(s.product_amount) supplier_sum
FROM supplier s
GROUP BY s.product_name
) t2 ON t1.product_name = t2.product_name
ORDER BY t1.order_status, t1.product_name
据我所知,我认为这是你想要的,如果这不是你所期望的,请更清楚地说明 您需要使用GROUPBY子句,并且必须使用count()函数来计算GROUPBY子句结果的行数。我正在写一个如何使用GROUPBY子句的示例,您需要根据需要修改查询
SELECT
order_products.product_name,
count(*) as Total_Orders,
MAX(supplier.product_amount) as Supplier_Amt,
orders.order_status
FROM supplier
INNER JOIN order_products ON supplier.product_name = order_products.product_name
INNER JOIN orders ON orders.order_id = order_products.order_id
WHERE orders.order_status = 'Not_Shipped'
GROUP BY order_products.product_name, orders.order_status;
您将需要进行查询,您可以编写另一个查询,只要将
WHERE orders.order\u status='Not\u Shipped'
替换为WHERE orders.order\u status='Shipped'
,如果您希望所有查询都在一个查询中,只需删除where子句。添加了示例data@mickmackusa编辑了我的问题以与期望值匹配。我认为您的期望结果令人困惑。257和258没有发货,对吗?请澄清您想要的输出。@mickmackusa再次感谢。。对于op.sum。。advice@scaisEdge我没有名为“sum\u order\u products”的表。这是我愿意得到的结果。请检查我的示例数据。sum\u order\u products是一个列别名而不是表名,此列别名由子选择产生。。。答案已更新为订购的产品table@mickmackusa . 谢谢你的提琴。。答案已更新。。在许多地方投票thanks@mickmackusa什么是拖拉的问题。。(我找不到trolled的翻译)。。DonwVoces问题?尽管进行了投票,但没有结果集。玩一玩:谢谢你的回复,但结果不是真的。检查@mickmackusa提供的SQLFIDLE。供应商的总金额翻了一番,应该是2500而不是10005000@Candy您提供的是已发货行和未发货行的混合结果集。我认为OP想要所有的方式,我认为OP想要的输出让我困惑。