2012-06-23 5 views
2

나는 스크립트를 더 빨리 만들려고 노력 중이며 SQL 내부에서 PHP로 사용되는 계산을 포함하기로 결정했습니다. 나는 그것이 코드로 필요한 경우 insert 또는 update을 사용할지 여부를 결정 if 문 확인해야합니다 :그런 다음 선택 내에서

IF (EXISTS (SELECT * FROM `edenteva` WHERE `Time`='1340252716' and `Code`='571119')) 
THEN IF (EXISTS (SELECT * FROM `map` WHERE `mega`='571119')) 
THEN UPDATE `map` SET `edenteva`='571119' WHERE `mega`='571119' 
ELSE INSERT INTO `map`(`mega`,`edenteva`) VALUES ('571119','571119'); 

을하지만, 나는 구문 오류를 얻고있다, 당신은 잘못된 것입니다 볼 수 있습니까?

1064 - SQL 구문에 오류가 있습니다. 근처 를 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 '(존재하는 경우를 (SELECT * edenteva FROM WHERE Time ='1340252716 ' 및 Code ='57111 '라인에서 1

+0

예쁜 당신이 주변 사람들 브래킷을 필요로하지 않는 다른 테이블의 행이있을 때 pdate 또는 우리가 값의 소스로 다른 테이블을 사용할 수 삽입 존재합니다. – Bridge

+0

여기 MySQL 전문가가 아니지만 'IF'를 '종료'하는 것을 잊어 버린 것 같습니다. – fudo

+2

더 깨끗한 옵션이 될 수도 있습니다. http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html (고유 인덱스에 따라 달라집니다. 매우 효율적일 수 있습니다.) – Andrew

답변

1
map.mega가에 정의 된 UNIQUE 인덱스가 (또는이 PRIMARY KEY의)

경우 우리는 따라서 ON DUPLICATE KEY UPDATE를 사용할 수 있습니다

INSERT INTO TABLE map (mega, edenteva) 
VALUES ('571119','571119') 
ON DUPLICATE KEY UPDATE edenteva = '571119'; 

우리 만 유를 수행하려는 경우

INSERT INTO map (mega, edenteva) 
    SELECT code, code 
    FROM edenteva 
    WHERE time = '1340252716' AND code = '571119' 
ON DUPLICATE KEY UPDATE edenteva = VALUES(edenteva) ; 

좋은 OLE SQL 바이올린 : http://sqlfiddle.com/#!2/9bb19/1

0

THEN ELSE ... MySQL의 땅에 저장된 프로그램입니다

그렇게에만이처럼 사용할 수 있습니다

은 ... 당신이나 다른 사람들이 더 기대 위해 이렇게 좋은 소식을 :(하지 경우

DELIMITER // 

CREATE FUNCTION SimpleCompare(n INT, m INT) 
    RETURNS VARCHAR(20) 

    BEGIN 
    DECLARE s VARCHAR(20); 

    IF n > m THEN SET s = '>'; 
    ELSEIF n = m THEN SET s = '='; 
    ELSE SET s = '<'; 
    END IF; 

    SET s = CONCAT(n, ' ', s, ' ', m); 

    RETURN s; 
    END // 

DELIMITER ; 
관련 문제