php - 添加来自不同表的每一行值

标签 php mysql

问题: 3 个表:tbl_product、tbl_soldproducts、tbl_purchasedetail tbl_product 有一个主键 prod_no,它是 2 个表中每个表的外键。 表产品 tbl_products tbl_purchaseddetail tbl_purchasedetail tbl_已售产品 tbl_soldproducts

在 tbl_soldproducts 中,我有 item_sold 列描述每笔交易该产品售出的商品数量。 在 tbl_purchasedetail 中,我有 qty_purchase ,它描述为每笔交易购买的商品数量。 我需要计算每种产品的销售总量和购买量。 前输出:

Prod no | item_sold |qty_purchase | left
   1    |    23     |     25      |  2
   2    |    1      |     10      |  9

我当前的代码显示错误的输出:

   SELECT TP.prod_no,TP.barcode,TP.prod_name, COUNT(TS.qty) as num_sold,
   COUNT(TPS.qty_delivered) as num_delivered
   FROM tbl_product AS TP 
   LEFT JOIN tbl_soldproducts AS TS
   on (TS.prod_no = TP.prod_no)
   LEFT JOIN tbl_purchasedetail AS TPS
   on (TPS.prod_no = TP.prod_no)
   group by TS.prod_no
   ORDER BY TP.prod_name

最佳答案

您从未向我们展示过任何示例数据,但我认为您应该在单独的子查询中聚合两个辅助表,然后将这些结果连接回tbl_product。像这样的东西应该有效:

SELECT TP.prod_no,
       TP.barcode,
       TP.prod_name,
       COALESCE(TS.num_sold, 0) AS num_sold,
       COALESCE(TPS.num_delivered, 0) AS num_delivered
FROM tbl_product TP
LEFT JOIN
(
    SELECT prod_no, COUNT(*) AS num_sold
    FROM tbl_soldproducts
    GROUP BY prod_no
) TS
    ON TP.prod_no = TS.prod_no
LEFT JOIN
(
    SELECT prod_no, COUNT(*) AS num_delivered
    FROM tbl_purchasedetail
    GROUP BY prod_no
) TPS
    ON TP.prod_no = TPS.prod_no
ORDER BY TP.prod_name

如果您想从 tbl_product 中选择的只是产品编号,那么您的原始查询可能没问题。但您的查询可能会出现奇怪的行为,因为您在使用 GROUP BY 时从 tbl_product 选择非聚合列。如果您还想选择其他列,则应该采用我建议的方法。

关于php - 添加来自不同表的每一行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41560880/

相关文章:

php - 从字符串中转义最后一个定界符

php打开修改并保存html文件

php - 根据在另一个表中找到的数据更新条目

python - 在 Python 中运行时出现 MySQL 查询错误,但在直接运行时却没有

php - Symfony2、PHP 在统计数据库中的许多对象时减少查询权重

mysql - 如何在 SQL 中获取数据库中 2 行之间的列差异

php - fatal error : Maximum execution time of 30 seconds exceeded when i execute daily run from my website

PHP & MySQL 查询依赖于复选框

export - 将数据和结构从一个实时数据库复制到测试数据库而不丢失数据

php - 本地服务器识别但在线服务器不识别的 HTTP 请求 header