2011-11-12 2 views
1

내가 블로그에 매일 카운터를 제작하고있는 나는이 쿼리에 문제가있는 경우 :MYSQL 쿼리 도움말 : 갱신

IF EXISTS SELECT * FROM tableA WHERE blog_id=1 
    UPDATE FROM tableA SET c=c+'1' WHERE blog_id='1' AND c_date=NOW() 
ELSE 
    INSERT INTO FROM tableA VALUES (blog_id,c,c_date) VALUES (1,1,now()) 

의 보여주는 다음과 같은 오류 :

1064 - 당신은이 SQL 구문의 오류.

근처 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 'IF가 TABLEA SELECT * FROM 존재를 WHERE blog_id = 1 UPDATE TABLEA FROM SET의 C = C +' '라인에서 1

My table entries should look like this : 
id , blod_id , c , c_date 
1 , 1001, 66 , 2011-11-11 
2 , 1001, 160 , 2011-11-12 
3 , 1002, 200 , 2011-11-12 
4 , 1003, 33 , 2011-11-12 

답변

3

난 당신이 수동부터 insert into on duplicate key update 구문

에 대한 lokoing하고 의심 :

12.2.5.3. INSERT ... DUPLICATE KEY ON UPDATE 구문은

중복 KEY UPDATE ON 지정하고 행은 UNIQUE 인덱스 나 PRIMARY KEY, 이전 행의 UPDATE에 중복 값을 일으킬 것이라고 삽입하면 수행됩니다 .

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

조회에서 더 많은 다음 예제와 유사해야합니다

INSERT INTO tableA (blog_id,c,c_date) VALUES (1,1,now()) ON DUPLICATE KEY UPDATE `c` = `c`+1, `c_date` = NOW() 

당신은 UNIQUE 키 또는이 작업을 할 수있는 PRIMARY KEY이 필요합니다. 테이블의 예를 바탕으로

ALTER TABLE `table` ADD PRIMARY KEY ( `id`) 

당신은 id 열 기본 키를 추가하거나 (c_date, blog_id) 필드

ALTER TABLE `table` ADD UNIQUE (
blog_id , 
c_date 
); 

에 고유 복합 인덱스를 추가하고이 사용할 수 있습니다

INSERT INTO tableA (blog_id, c, c_date) 
    VALUES (1, 1, NOW()) 
ON DUPLICATE KEY UPDATE 
    c = c + 1    --- update only `c`, not any part of the unique key 
+0

감사하지만 쿼리가 내 것과 동일한 오류를 표시합니다. : # 1064 - SQL 구문에 오류가 있습니다. 올바른 구문이 VALUES (1,1, now()) 근처에서 사용하도록 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. 중복 키 업데이트 'c' ='c' + 1,'c_date' = NOW()' 1 호선에서 – user82324

+0

나는 오류를 수정했지만 새로운 문제가있다. 여러 레코드를 업데이트하는 대신 삽입하는 중 ... – user82324

+0

테이블에 고유 한 인덱스가 있습니까? 'UNIQUE' 인덱스 또는 'PRIMARY KEY'일 수있는 행에 고유 필드가 있어야합니다. 고유 한 것과 중복 된 것을 삽입하고 삽입하면 업데이트됩니다. 그렇지 않으면 삽입됩니다. –

1

당신이 정말로 원하는 것은 this입니다 (조심하십시오, 그것은 MySQL에서만 작동합니다)!

+0

감사합니다.하지만 어떻게 거기에서 사용할 수 있습니까? 질문을 편집 했으므로 샘플 테이블을 볼 수 있습니다. – user82324

+0

Ben Swinburne의 답변은 괜찮습니다. 그러나 blog_id에 고유 한 색인을 추가해야합니다 (그래서 1001 번 두 번 잘못 사용했다고 생각합니다) – MatTheCat

+0

blog_id 1001은 counter_date가 ... counter_date가 보고서를 가져 오는 데 사용됩니다 ... – user82324