裏MySQL MySQL のユーザー変数で支払いの繰越処理 2
繰越処理 1でユーザー変数を使うとlimitやorder byを使ったソートの処理がめんどうになる。limitやorder byを使うことが想定される場合は、あらかじめ、paymentとcarry_overのカラムを追加しておいて
CREATE TABLE `payment` ( `month_year` DATE NOT NULL , `revenue` INT NOT NULL DEFAULT '0', `payment` INT NOT NULL DEFAULT '0', `carry_over` INT NOT NULL DEFAULT '0', PRIMARY KEY ( `month_year` ) ) ENGINE = INNODB
INSERT INTO payment (month_year,revenue) values ( "2008/04/00",3000 ), ( "2008/05/00",1000 ), ( "2008/06/00",2000 ), ( "2008/07/00",7000 ), ( "2008/08/00",1000 );
以下のupdate文でまとめて更新してしまって使うとよい
SET @carry_over:=0; UPDATE payment SET payment=IF(revenue+@carry_over>=5000, revenue+@carry_over+(@carry_over:=0), (@carry_over:=@carry_over+revenue)*0), carry_over=@carry_over ORDER BY month_year ASC;