2009-11-06 1 views
0

항목이 mysql 테이블에 있는지 확인하는 쿼리를 하나 가질 수 있으며, 존재하는 경우 열을 반환하지만,없는 경우에는 값을 반환 할 수 있습니까?mysql에 항목을 추가하고 하나의 쿼리에 해당 항목이없는 경우 열을 반환 할 수 있습니까?

userID - int, auto-increment 
userName - varchar(100) 
active - tinyint(1) 

내가

select userID from users where userName='<some value>' 

같은 뭔가를 원하는 사용자 이름이 존재하는 경우, 다음하지 않을 경우, 사용자 아이디를 돌려 삽입하고 새로를 반환 : 나는 다음과 같은 레이아웃과 사용자 테이블이 사용자 ID가 증가했습니다.

두 개의 쿼리 (하나는 userName이 존재하는지 확인하고 다른 하나는 삽입해야 함)에서이를 수행 할 수 있음을 알고 있지만 하나만 할 수 있습니까? 내 코드에서 호출 할 수있는 한 가지만 저장 프로 시저를 만들 수 있지만 저장 프로 시저를 구상 할 수있는 유일한 방법은 두 쿼리를 수행하는 것입니다.

REPLACE INTO 및 ON DUPLICATE KEY UPDATE와 같은 항목이 표시되지만 값을 선택하는 것이 아니라 업데이트에만 적용됩니다.

답변

1

당신은 존재하는 경우 확인하고 하나 개의 쿼리에 삽입 할 수 있습니다

insert into users (userName) values ('<some value>') 
where not exists (
    select * from users where userName = '<some value>' 
) 

하지만 그 후에도 사용자 ID를 선택해야합니다 :

select userid from users where userName = '<some value>' 

내가 생각하지 않습니다 INSERT는 SELECT 안에있을 수 있습니다.

+0

실제로 userid가 테이블의 PK 인 경우 mysql_insert_id() – Zak

+0

http://us3.php.net/mysql_insert_id – Zak

+0

@ Zak을 사용하면 한 번에 모두 사용자 ID를 가져올 수 있습니다. 사용자가 이미 존재했다 – Andomar

0

많은 사람들이 데이터베이스에 존재하는이 유형의 논리에 대해 논쟁 할 것이지만이를 위해 저장 프로 시저를 만들 수 있어야합니다.

+0

하지만 저장 프로 시저가 여전히 두 개의 트랜잭션을 수행해야합니까? –

관련 문제