2010-06-26 5 views
2

행 자체가 고유해야한다는 조건으로 MySQL 테이블에 행을 삽입하려고합니다. 예를 들어 행의 길이는 id, nameaddress이지만 중복 된 이름과 주소가 포함 된 삽입은 사용할 수 없습니다. 삽입하기 전에 select를 시도해 보았습니다. 결과를 찾지 못했지만 작동하지 않는 것 같습니다. 나는 현재 삽입하기 전에이 작업을 수행하려고 :MySQL 행이 고유한지 확인하는 방법은 무엇입니까?

SELECT * FROM locations WHERE cityId = $cityId AND countyId = $countyId AND stateId = $stateId AND countryId = $countyId AND district = $district; 

편집 : 그 모든 필드는, 그들은 단지 모두 동시에 복제 할 수 없습니다 복제 할 수 있습니다.

답변

3

가장 깨끗한 해결책은 cityId, countyId, stateId, countryId, districtId에 UNIQUE 제약 조건을 넣은 다음 insert 문이 성공했는지 확인하는 것입니다.

ALTER TABLE your_table_here ADD UNIQUE INDEX(cityId, stateId, countryId, countyId, districtId); 

을 그리고 삽입 쿼리를 다시 실행 :

는 신속하게 테스트합니다. 중복이 발생하면 응용 프로그램에서 처리 할 수 ​​없게됩니다.

+0

이러한 ID는 중복 될 수 있으며 함께 복제 할 수 없습니다. – chustar

+2

@chustar : 데니스의 제안은 그 요구 사항을 충족시킵니다. – Hammerite

1

사용할 수있는 이미 테이블에 설정 고유 인덱스를 가지고 가정 : 같은 제약

INSERT IGNORE INTO locations SET cityId = $cityId, countyId = $countyId, stateId = $stateId, countryId = $countyId, district = $district; 
0

, 당신은해야한다 복합 기본 키 이름과 주소 열을 만들었습니다 ..

+1

믿을만한. 최소한 열에 고유 색인이 있어야합니다. – Hammerite

0

I을 내가 더 나은 해결책이 있다고 생각해. 먼저 데이터베이스를 점검하고 다음을 사용하여 IP 및 이름이 존재하는지 확인하십시오.

$check = mysqli_num_rows(mysqli_query($conn, 'SELECT FROM tablename WHERE name="'.$_POST['name'].'"')); 
if($check = 0) //Checks if the name does not exist 
{ 
     // Your code... 
} 
else 
{ 
     // Error to tell the user the name already exists.... 
} 
+0

더 나은 솔루션이라고 생각하는 이유를 설명해 주시겠습니까? 기존 답변을 사용하려면 하나의 쿼리가 필요하지만 코드에는 두 가지 쿼리가 필요합니다. 원본은 더 효율적이지만 솔루션이 더 좋다고 생각하는 다른 이유가 있습니까? – andrewsi

관련 문제