毎日、各アイテムに対して要求および発行されたアイテムの数を記録する必要があります。purchase_doc
表は次のとおりです。
テーブルには、次のrequested_items
ように要求されたアイテムが含まれています。
テーブルには、次のmovement
ように要求されたアイテムが含まれています。
必要な出力 (挿入するデータ) は次のとおりです。
これを行う 1 つの方法は、最初の 2 つのクエリから発行およびリクエストされたアイテムをフェッチし、各アイテム ID に対して発行およびリクエストされたアイテムの配列を構築し、これらの値を次のように Daily_movement テーブルに挿入することです。
SELECT n.item_id AS n__item_id, SUM(n.qty) AS qty
FROM requested_items n LEFT JOIN purchase_doc doc ON n.doc_id = doc.id
WHERE (doc.type = 'Item Request' AND doc.created_at > DATE_SUB(NOW(), INTERVAL 24 HOUR))
GROUP BY n.item_id
SELECT n.item_id AS item_id, SUM(n.qty) AS qty
FROM movement n LEFT JOIN purchase_doc doc ON n.doc_id = doc.id
WHERE (doc.type = 'Store Issue' AND doc.created_at > DATE_SUB(NOW(), INTERVAL 24 HOUR))
GROUP BY n.item_id
これらの SELECT やその他の SELECT から、この方法で、このアイテムのリクエスト、問題などの数量を含む 1 日あたりのアイテムごとに 1 つの行を挿入する必要があります。
INSERT INTO daily_movement date, item_id, requested_qty, issued_qty VALUES ( NOW(), 23, 4, 5), ( NOW(), 25, 5, 5), ( NOW(), 113, 6, 8);
ただし、SELECT が多すぎて (アイテムごとに他のアクティビティも実行する必要があるため)、その後に挿入が続きます。
私の質問は次のとおりです。単一の SELECT ... INSERT ステートメントでこれを行うことは可能ですか。そうでない場合、誰かがこれを行うためのよりエレガントな方法を提案できますか