0

私は高度なスキルを持たない基本的な開発者です。php/mysql に注文処理システムがあり、SQL の優先順位に基づいて不足を計算したいと考えています。現在、これにはphp配列を使用していますが、データベース自体でこれを実現したいと考えています。

これが私が持っているクエリです

ここに画像の説明を入力

そして、これが私が達成したいことです

ここに画像の説明を入力

ありがとう。

4

1 に答える 1

0

内部クエリは、製品と orderid で注文し、製品変更時に現在の合計をリセットして計算します。

/*
drop table orders;

create table orders (orderid varchar(6),productid varchar(10),reqqty int);

create table stock (productid varchar(6), stock int);

truncate table orders;
insert into orders values
('OR250','A45',100),('OR250','A55',200),('OR250','A65',400),
('OR260','A45',150),('OR260','A55',25),
('OR270','A55',100),('OR270','A65',50),('OR270','B15',500)
;

TRUNCATE TABLE STOCK;
INSERT INTO STOCK VALUES
('A45',200),('A55',250),('A65',180),('A75',300),('A85',400),('A95',780),('B15',150),('B25',225);
*/

SELECT  T.ORDERID,T.PRODUCTID,T.REQQTY,T.SHORTAGE,T.STOCKREMAINING AS STOCK
FROM
(
SELECT  @RN:=IF (O.PRODUCTID  <> @PRV,1,@RN+1) RN,
            O.ORDERID,O.PRODUCTID,O.REQQTY
            ,S.PRODUCTID AS SPRODUCTID,S.STOCK
            ,@PRV:=O.PRODUCTID PREVPROD
            ,@RT:=IF(@RT=0 OR @RN = 1,S.STOCK-O.REQQTY,@RT - O.REQQTY)  RT
            ,CASE WHEN @RT < 0 THEN @RT * -1 ELSE 0 END AS SHORTAGE
            ,CASE WHEN @RT >= 0 THEN @RT ELSE 0 END AS STOCKREMAINING
FROM    (SELECT @RN:=0) RN,(SELECT @PRV:='') PRV,(SELECT @RT:=0) RT,ORDERS O
JOIN  STOCK  S ON S.PRODUCTID = O.PRODUCTID
) T
ORDER   BY  T.ORDERID,T.PRODUCTID
于 2016-07-11T07:46:22.893 に答える