2012-09-29 3 views
1

가능한 중복 :
“INSERT IGNORE” vs “INSERT … ON DUPLICATE KEY UPDATE”두 SQL 쿼리를 하나로 결합하는 방법은 무엇입니까?

안녕하세요 민족

$sql1="SELECT * FROM `table` WHERE `user` = '$user'"; 
$res1=mysql_query($sql1); 
if(!$res1||mysql_num_rows($res1)<1){ 
$sql2="INSERT INTO `table` (`user`) VALUES ('$user')"; 
$res2=mysql_query($sql2); 
if(!$res2){echo 'Yes';}else{echo 'No';} 
} 
else{echo 'user already exists!';} 

하나에 두 개의 쿼리를 결합 할 수 있습니까?

+0

'$ user'는 어디에서 왔습니까? – PeeHaa

+0

'user' 열을 ** UNIQUE로 설정합니다 ** – hjpotter92

+0

이 옵션은 UNIQUE 열을 설정하면 사용자에게 –

답변

3

을 사용할 수 있습니다, 각 사용자의 ONE 항목의 최대있을 것입니다. ALTER TABLE하고 열 UNIQUE합니다 다음

ALTER TABLE `table` 
    ADD UNIQUE INDEX `user` (`user`); 

와,이 같은 단일 쿼리는 좋은 것 :

$res = mysql_query("INSERT IGNORE INTO `table`(`user`) VALUES('".mysql_real_escape_string($user) . "')"; 
echo (mysql_affected_rows() == 0) ? "No" : "Yes"; 

mysql_affected_rows().

+0

dublicte 값을 가지고 있다면 자동으로 새 값 $ user를 설정해야합니다. 사용하지 않을 경우, 행을 삽입하지 않아도됩니다 ... 내가 dublicate하면 ​​자동으로 새 값 $ user를 생성해야합니다. –

+0

그러면 자동 증가 필드에 아무런 값을주지 않고 테이블 사용자를 삽입하십시오. sql이 자동으로 수행합니다. 그렇지 않으면 테이블 구조를 @john 게시합니다. –

+0

문제! 나는 매번 '예'라고 대답합니다. 와우 나는이 값을 가진'user'가'table'에 이미 있음을 알 수 있습니까? –

3

이 쿼리를 사용하십시오.

INSERT INTO USER SELECT * FROM TABLE WHERE user='$user' 

table 테이블과 사용자 테이블의 열들의 수가 같아야 또한 타입. 당신이 UNIQUE에 열 user을 설정하면

당신은 또한

INSERT into user 
SELECT * from table 
WHERE user='$user' 
AND 
    NOT EXISTS (SELECT * FROM USER 
       WHERE USER = '$user') 
+0

INSERT TOTO TABLE USER? 이것은 뭐니 ? –

+0

내 테이블이'table' –

+0

죄송합니다. 나는 편집했다. –

관련 문제