2014-10-25 3 views
0

두 열 (a 및 b)의 조합이 이미 존재하지 않는 경우에만 INSERT를 수행하려고합니다. 그렇지 않으면 UPDATE를하고 싶습니다. 다음 코드는 항상 원하는대로 업데이트하는 대신 새 행을 INSERT하는 것입니다. 내가 생각하는 이유는 내가 관리하지 않기 때문에 내 테이블의 설정에서 일종의 고유 한 열이있는 것입니다. 해결책이있는 사람이 있습니까? 구글은 .. 내 친구 오늘하지 않는 것'insert into ... into duplicate key'에 자동 증가

표 :

 
id : int, primary, AI 
a b c and d : int 

코드 :

$req = $connexion -> prepare(" 
INSERT INTO position (a,b,c,d) 
VALUES (:a,:b,:c,:d) 
ON DUPLICATE KEY UPDATE 
c=:c;"); 
$position->bindParam(':a', $a); 
$position->bindParam(':b', $b); 
$position->bindParam(':c', $c); 
$position->bindParam(':d', $d); 
$a = $val_a; 
$b = $val_b; 
$c = $val_c; 
$d = $val_d; 
$req -> execute(); 
+0

이들의 A B C d 개의 아무도 데이터베이스 테이블의 열없는 고유 인덱스를 가질를 사용하여 UNIQUE KEY를 추가 할 수 있습니다. ID는 기본 키이므로 중복 ID로 작동합니다. 이 열 중 하나에 UNIQUE INDEX를 추가하여 작동 시키십시오. – Ananth

+1

고유 키 추가 - 'ALTER TABLE 위치 추가 고유 키 (a, b)' – Sean

+0

@Sean 답변으로 게시하십시오. – Barmar

답변

1

ON DUPLICATE KEYUNIQUE KEY이 필요합니다. 당신은 ALTER TABLE 쿼리

ALTER TABLE position ADD UNIQUE KEY (a,b) 
+0

고마워요 !! 그것은 완벽하게 작동합니다! – fazac

1

이미 당신이 필요로 반영하기 위해 테이블을 변경하는 시도? 코드를 실행하기 전에 이것을 시도하십시오. 당신이 PRIMARY KEY에 일치하지 않는 경우

ALTER TABLE `position` ADD UNIQUE `unique_index`(`a`, `b`);