2017-12-10 13 views
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 
$$ 

答えて

0

もっと簡単なアプローチがあります。

ALTER TABLE summary ADD CONSTRAINT summary_date_uniq UNIQUE(`date`); 

し、新しいデータを挿入するときon duplicate key updateの構文を使用します:まず、重複したエントリを防ぐために、あなたのdate列にunique制約を追加するには、reply..bitため

INSERT INTO summary 
(`date_`, `income_`, `expenditure_`, `other_`) 
VALUES (2, '2017-12-22', 100, 10, 80) 
ON DUPLICATE KEY UPDATE 
`income` = `income_` + VALUES(`income_`), 
`expenditure` = `expenditure_` + VALUES(`expenditure_`), 
`others` = `others_` + VALUES(`others_`); 
+0

おかげで私はこれを持っています私が収入の列に挿入しようとするとエラーが不明な列の収入 –

+0

@ JoshuaSampsonがDDLをもう一度見直しました。あいまいな理由から、すべてのカラム名は '_'で終わります。私はそれに応じて私の答えを編集しました。 – Mureinik

+0

私は何をしているのかを彼に更新しようとしています。なぜなら、すべてのことを短くしたのは、コードが長すぎるかもしれないということでした。 –

関連する問題