php - MYSQL - 剩余数量 - 带序列号的产品 - 多表

标签 php mysql sql

我怎样才能制作一个mysql来显示所有具有不同序列号和可用数量的特定产品。 请注意,我的客户没有存储数量的表, 我们拥有的是:

  • received_purchase_order_detail
  • received_transfer_order_detail
  • transfer_order_detail
  • official_receipt_detail
  • ...还有更多表格... 这些是我们用来了解还有多少可用数量的表格。

可用数量=(received_purchase_order_detail+received_transfer_order_detail)-(transfer_order_detail+official_receipt_detail ....)

我已经有了 FuzzyTree 给出的查询,但它显示了按产品数量分组。

MySQL Group By Product Id BUT NOT Product that has a Serial Number

我现在需要的是查询具有不同序列号的产品id并显示每个可用数量。

而不是

Product_ID      Product_Name    Quantity_Available
6               Apple           100
7               Blender         2
8               Toaster         3

我需要

Product_ID  Product_Name    Serial_No   Quantity_Available
6           Apple           NULL        100
7           Blender         b1          0
7           Blender         b2          1
7           Blender         b3          1
8           Toaster         t1          1
8           Toaster         t2          1
8           Toaster         t3          1

--------

<小时/>

我现在的测试sql问题: 我一直在将派生表与联合结合起来,并通过 s_product_serial 进行分组,以便它们分开。但我的查询显示了序列号 amount_available 为 0 的所有产品,就像它们正在跟踪第一个已售序列号产品的第一个数据..,仅售出了第一个序列号为 b1 的 blender ,但另一个 blender 应该仍然可用..

注意 我添加了联合查询,因为产品表没有serial_no列...,序列分散在不同的表上。所以我首先做的是联合表来收集完整的可用的serial_no。或者也许我以错误的方式处理这个问题?

问题

Product_ID  Product_Name    Serial_No   Quantity_Available
6           Apple           NULL        100
7           Blender         b1          0
7           Blender         b2          0
7           Blender         b3          0
8           Toaster         t1          0
8           Toaster         t2          0
8           Toaster         t3          0
SELECT
                        tabletest1.i_p_id,
                        tabletest1.s_product_serial,
                        (
                            COALESCE(tabletest1.Product_Total,0) +
                            COALESCE(table1.Product_Total,0) +
                            COALESCE(table2.Product_Total,0) +
                            COALESCE(table3.Product_Total,0)
                        ) AS 'Total QTY Added',
                        (
                            COALESCE(tabletest1.Product_Total,0) +
                            COALESCE(table4.Product_Total,0) +
                            COALESCE(table5.Product_Total,0) +
                            COALESCE(table6.Product_Total,0)
                        ) AS 'Total QTY Released',
                        (
                            COALESCE(tabletest1.Product_Total,0) +
                            COALESCE(table1.Product_Total,0) +
                            COALESCE(table2.Product_Total,0) +
                            COALESCE(table3.Product_Total,0)
                        ) -
                        (
                            COALESCE(tabletest1.Product_Total,0) +
                            COALESCE(table4.Product_Total,0) +
                            COALESCE(table5.Product_Total,0) +
                            COALESCE(table6.Product_Total,0)
                        ) AS 'Current Quantity Available'
                    FROM
                        (
                                ..union query..
                        )
                        AS tabletest1
                    LEFT JOIN
                        (
                                derivedtable1..
                        ) 
                        AS table1 ON table1.i_p_id = tabletest1.i_p_id
                    LEFT JOIN 
                        (
                                derivedtable2..
                        ) 
                        AS table2 ON table2.i_p_id = tabletest1.i_p_id  
                    LEFT JOIN 
                        (
                                derivedtable3..
                        ) 
                        AS table3 ON table3.i_p_id = tabletest1.i_p_id
                    LEFT JOIN 
                        (
                                derivedtable4..
                        ) 
                        AS table4 ON table4.i_p_id = tabletest1.i_p_id
                    LEFT JOIN 
                        (
                                derivedtable5..
                        ) 
                        AS table5 ON table5.i_p_id = tabletest1.i_p_id
                    LEFT JOIN 
                        (
                                derivedtable6..
                        ) 
                        AS table6 ON table6.i_p_id = tabletest1.i_p_id
                    GROUP BY
                        i_p_id,
                        s_product_serial

最佳答案

我想我明白了。

而不是 AS 表(n) ON 表(n).i_p_id = tabletest(n).i_p_id

它应该指的是序列 AS 表(n) ON 表(n).s_product_serial = tabletest(n).s_product_serial

现在它工作正常,但根据我的 sql 的长度,我想知道这是否有效?

关于php - MYSQL - 剩余数量 - 带序列号的产品 - 多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24959812/

相关文章:

php - 将阿拉伯语文本从 Android 手机发送到在线 MySQl 数据库

php - 如何从 CSS 列表样式 :decimal 中删除点 '.'

php - 如何使用php导入maxmind数据库

php - Varnish 不仅仅适用于一个网站

sql - 引用一个表或另一个表的表行

mysql - 查找列名与给定模式匹配的表

php - 如何在 __call 中模拟不存在的方法错误?

PHP/MYSQL/JSON : Simplify JSON for API

php - 如果我想在我的登录页面 (php) 中使用 128 位 ssl,我可以使用什么

mysql - 从 MySQL 选择唯一行