1
私の英語を赦してください私は言語翻訳を使用しています。
私はテーブルsummary
を持っています、私はこのテーブルに挿入する前にトリガーを発射したい、すなわちsummary
と私が望むのは、TRIGGERは受信日が既存の日付と一致するかどうかをチェックする必要があります。それだけで挿入する必要があり、他の値を既存の日付が一致すると更新されるMysqlトリガがすべて一致する場合は挿入BEFORE INSERT
`summary` +------+-------+-------------+------+ | date |income | expenditure | other| |22/17 | 200 | 50 | 30 | |22/17 | 100 | 10 | 80 | |23/17 | 50 | 100 | 0 | +------+-------+-------------+------+ `summary` // this is how i want it to be +------+-------+-------------+------+ | date |income | expenditure | other| |22/17 | 300 | 150 | 30 | |23/17 | 50 | 100 | 0 | +------+-------+-------------+------+
私のテーブルコード
CREATE TABLE `summary` ( `id_` int(11) NOT NULL, `date_` date NOT NULL, `income_` text NOT NULL, `expenditure_` text NOT NULL, `other_` text NOT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `summary` (`id_`, `date_`, `income_`, `expenditure_`, `other_`) VALUES (1, '2017-12-22', 200, 50, 30), (2, '2017-12-22', 100, 10, 80), (3, '2017-12-23', 50, 100, 0);
これはNovist
トリガコード
DELIMITER $$ CREATE TRIGGER inc_trig BEFORE INSERT ON income_ FOR EaCH ROW BEGIN DECLARE income,expenditure,other INT; SET income=1; SET expenditure=2; SET other=3; IF(NEW.date_ != date_)THEN IF NEW.name_ = income THEN INSERT INTO summary (date_,income) VALUES (new.date_,new.amount); ELSEIF NEW.name_ = expenditure THEN INSERT INTO summary (date_,expenditure_) VALUES (new.date_,new.amount); ELSEIF NEW.name_ = other THEN INSERT INTO summary (date_,other_) VALUES (new.date_,new.amount); ELSE(new.date_ = date_)THEN IF NEW.name_ = income_ THEN UPDATE summary SET income_ = income_ + new.amount); ELSEIF NEW.name_ = expenditure THEN UPDATE summary SET expenditure_ = expenditure_ + new.amount); ELSEIF NEW.name_ = other THEN UPDATE summary SET other_ = other_ + new.amount); END IF; END $$
おかげで私はこれを持っています私が収入の列に挿入しようとするとエラーが不明な列の収入 –
@ JoshuaSampsonがDDLをもう一度見直しました。あいまいな理由から、すべてのカラム名は '_'で終わります。私はそれに応じて私の答えを編集しました。 – Mureinik
私は何をしているのかを彼に更新しようとしています。なぜなら、すべてのことを短くしたのは、コードが長すぎるかもしれないということでした。 –