Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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中带内连接的求和_Php_Mysql_Inner Join - Fatal编程技术网

PHP中带内连接的求和

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

我正在使用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               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想要的输出让我困惑。