Php MySQL按产品Id分组,但不按具有序列号的产品分组

Php MySQL按产品Id分组,但不按具有序列号的产品分组,php,mysql,sql,Php,Mysql,Sql,有人能帮助我如何对此进行有效的mysql查询吗 我需要进行查询以获取所有订购项目的总数量 结合 我需要进行查询以获取所有已接收项目的总数量 请注意,有些产品在收到时有序列号,有些产品在我的“收到的订单详情”表中没有序列号。这就是我遇到问题的地方,因为序列号的原因,接收到的总数量增加了一倍 表:收到的订单详情 i_rpoh_id i_p_id i_quantity_received s_product_serial 1 1 100 1 2

有人能帮助我如何对此进行有效的mysql查询吗

我需要进行查询以获取所有订购项目的总数量

结合

我需要进行查询以获取所有已接收项目的总数量

请注意,有些产品在收到时有序列号,有些产品在我的“收到的订单详情”表中没有序列号。这就是我遇到问题的地方,因为序列号的原因,接收到的总数量增加了一倍

表:收到的订单详情

i_rpoh_id   i_p_id  i_quantity_received s_product_serial
1           1       100 
1           2       100 
1           3       50  
1           4       25  
1           7       100 
1           8       50  
1           6       1                   XYZ1
1           6       1                   XYZ2
1           5       1                   ABC1
1           5       1                   ABC2
现在,我有两个单独的sql需要组合。 如果可能的话,我不想对此使用Union语句

--获取订购的总数量

SELECT
    products.i_id AS 'ID',
    products.s_name AS 'Name',
    COALESCE(SUM(purchase_order_details.i_quantity_ordered),0) AS 'Total Quantity Ordered'
FROM
    products
LEFT JOIN
    purchase_order_details
    ON
    products.i_id = purchase_order_details.i_p_id
GROUP BY
    products.i_id   

-- to get the Total Quantity Received
SELECT
    products.i_id AS 'ID',
    products.s_name AS 'Name',
    COALESCE(SUM(received_po_details.i_quantity_received),0) AS 'Total Quantity Received'
FROM
    products
LEFT JOIN
    received_po_details
    ON
    products.i_id = received_po_details.i_p_id
GROUP BY
    products.i_id

您可以通过创建派生表或每种类型的总和(在下面的查询中,它们被命名为
t1
t2
)并将派生表左键连接到主产品表来组合这些查询

SELECT
    p.i_id AS 'ID',
    p.s_name AS 'Name',
    COALESCE(t1.total,0) 'Total Quantity Ordered',
    COALESCE(t2.total,0) 'Total Quantity Received'
FROM products p
LEFT JOIN (
    SELECT 
        pod.i_p_id,
        SUM(pod.i_quantity_ordered) total
    FROM purchase_order_details pod
    GROUP BY pod.i_p_id
) t1 ON t1.i_p_id = p.i_id
LEFT JOIN (
    SELECT 
        rpd.i_p_id,
        SUM(rpd.i_quantity_received) total
    FROM received_po_details rpd
    GROUP BY rpd.i_p_id
) t2 ON p.i_id = t2.i_p_id

嗨,FuzzyTree,你所做的工作很有效,但我有一些问题,因为我是这方面的新手……)-此sql是否同时运行3个查询?-这会影响查询速度和带宽吗如果我们想在每个页面上显示数百个数据,是否可以选择此查询我不明白你用左连接做了什么样的sql语句,用t1和t2做了什么样的sql语句,这是什么样的sql语句,所以我可以对它进行更多的研究。thanks@anonymousmetoyou即使有3个
SELECT
子句,它们都是1个查询的一部分
t1
t2
称为
派生表
。例如,
t1
是一个
派生表
,由两列、产品id和订购总量组成。我相信这是对您正在查找的数据进行的最快的查询,并且它与分页功能很好地配合(只需在末尾添加
LIMIT
OFFSET
子句即可选择特定的页面)