2

したがって、私の在庫システムには、同じ列名を持つ 2 つのテーブルがあります (1 つは生産された在庫用、もう 1 つは出荷された在庫用)。製品ごとに列をグループ化し、数量を合計する方法を見つけました。したがって、両方のテーブルでこのクエリを実行し、製品変数が一致する各テーブルから数量列を減算します。

これを使用して、グループを追加し、在庫の合計 (in) を合計します。

 $query = "SELECT id, type, color, product, SUM(Quantity) AS TotalQuantity FROM inventory GROUP BY id, color, type";

そして、これを使用して、在庫出荷 (アウト) をグループ化して合計します。

$query = "SELECT id, type, color, product, SUM(Quantity) AS TotalQuantity FROM shipped GROUP BY id, color, type";

では、これらのそれぞれの数量列を減算するにはどうすればよいでしょうか?

編集:

これを出力に使用します:(テーブル)

 echo '<tr><td>'. $row['product'] . '</td><td id="replace">' . $row['type'] . '</td><td>' . $row['color']. '</td><td>'. $row['TotalQuantity'];
 echo "</td></tr>";
4

1 に答える 1

0

これは、1 つのクエリで完全に実行できます。これらのINNER JOIN間では、数量を差し引くことができます。列は、リスト内のテーブルのid, color, product1 つからのみ必要です。SELECT

SELECT
  inv.id, 
  inv.color,
  inv.product,
  /* total inventory quantity */
  SUM(inv.Quantity) AS TotalInvQuantity,
  /* total shipped quantity */
  SUM(ship.Quantity) AS TotalShipQuantity,
  /* inventory quantity minus shipped quantity */
  SUM(inv.Quantity) - COALESCE(SUM(ship.Quantity), 0) AS SubtractedQuantity
FROM
  inventory inv
  LEFT JOIN shipped ship ON inv.id = ship.id AND inv.color = ship.color AND inv.product = ship.product
GROUP BY
  inv.id,
  inv.color,
  inv.product

コメント後に更新

SELECT
  inv.id,
  inv.color,
  inv.product,
  inv.TotalInvQuantity, 
  COALESCE(ship.TotalShipQuantity, 0) AS TotalShipQuantity,
  inv.TotalQuantity - COALESCE(ship.TotalQuantity, 0) AS SubtractedQuantity
FROM (
    SELECT id, product, color, SUM(Quantity) AS TotalInvQuantity
    FROM inventory
    GROUP BY id, product, color
  ) inv
  LEFT JOIN (
    SELECT id, product, color, SUM(Quantity) AS TotalShipQuantity
    FROM inventory
    GROUP BY id, product, color
  ) ship ON 
      inv.id = ship.id 
      AND inv.product = ship.product 
      AND inv.color = ship.color
于 2012-06-17T02:41:14.773 に答える