2009-11-06 39 views
0

我可以有一個查詢來檢查一個條目是否在mysql表中,如果它存在,返回一個列,但如果它不存在,插入並返回一個值?我有以下佈局的用戶表:我可以添加一個條目到mysql並返回一列,如果它不存在於一個查詢中?

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

我要像做

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

和用戶名的合法性,然後返回用戶ID,如果沒有,將其插入並返回新遞增的用戶ID。

我知道我可以在兩個查詢(一個檢查如果用戶名爲存在,然後插入另一)做到這一點,但我能做到這一點的呢?我可以創建一個存儲過程,只能從我的代碼中調用一個東西,但我可以設想存儲過程的唯一方法是也執行兩個查詢。

我看到的東西像REPLACE INTO和上的重複密鑰更新,但這些似乎只工作在更新,而不是選擇一個值。

回答

1

您可以檢查它是否存在,並在一個查詢中插入:

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

但在那之後,你仍然需要選擇用戶名:

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

我不認爲一個INSERT可以在SELECT中。

+0

實際上,如果userid是桌面上的PK,你可以使用mysql_insert_id() – Zak 2009-11-06 23:53:54

+0

http://us3.php.net/mysql_insert_id – Zak 2009-11-06 23:54:27

+0

@Zak一次全部得到它:如果用戶已經存在 – Andomar 2009-11-07 00:05:16

0

應該可以創建一個存儲過程,會爲你做這一點,雖然很多人都知道我會反對這種類型的現有數據庫的邏輯。

+0

但是,存儲過程是否仍然需要執行兩個事務? – 2009-11-06 23:29:37

相關問題