2017-12-10 15 views
1

제발 용서해주십시오. 영어 번역기를 사용하고 있습니다.
나는 summary 테이블을 가지고 있는데,이 테이블에 삽입하기 전에 트리거가 필요합니다. 예를 들어 summary입니다. 원하는 것은 수신인이 기존 날짜와 일치하는지 확인해야하며, 테이블을 업데이트하고 들어오는 값을 추가해야합니다. 그냥 삽입해야 다른 값을 기존날짜가 일치하는 경우 업데이트하는 Mysql 트리거와 일치하는 항목이 없을 경우 삽입 이전에 삽입

 
`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

내가하고있는 일을 업데이트하려고하는데, 모든 일을 짧게 만들었던 이유는 코드가 너무 길어서 내가 게시해야한다고 생각한다. –