2011-05-12 208 views
1

有一個mysql數據庫存儲ID和名稱,當用戶使用表單創建名稱時,他們可以創建現有名稱,因爲唯一ID是ids,例如:如果名稱存在保存爲名稱(1)名稱(2)等

d49f2c32f9107c87c7bb7b44f1c8f297 name 
2fa9c810fbe082900975f827e8ed9408 name 

我想要做的就是在插入數據庫時​​保存第二個「名稱」 - >「名稱(1)」。

到目前爲止,我已經得到了,這是什麼,一個想法在

可以說輸入的名稱是「名」

$input = 'name'; 

選擇我們想要從MySQL數據庫檢查該名稱

mysql_query(SELECT * FROM `table` WHERE `name` = '$input'); 

如果結果存在,則插入爲$input.'(1)'

我q問題是如果名稱存在,並且名稱(1​​)也存在,那麼我如何在其中添加名稱(2)...

+0

檢查我的答案 – dynamic 2011-05-12 13:38:26

+1

可能相關:http://stackoverflow.com/questions/2614679/check-if-exists-if-so-update-by-1-if-not-insert – 2011-05-12 13:38:50

+1

@ yes123:乞討接受?對於執行上帝的答案知道有多少個查詢? – 2011-05-12 13:39:03

回答

1
$i = 1; 
$sourceName = $name; 
while(sql "SELECT COUNT(*) FROM table WHERE name = '$name'") { 

    $name = $sourceName.' ('.$i.')'; 
    $i++; 
} 

在這一點上,你有最後$name(與$i計數迭代)

+0

雖然這會起作用,但這可能是最糟糕的做法。將SQL調用作爲循環的參數可能會導致一些非常令人印象深刻的問題,特別是如果用戶被調用(例如)'%'。 – 2011-05-12 13:43:45

+0

%與'='沒有任何意義 – dynamic 2011-05-12 13:49:39

+0

這會找到「Bob」,但會找到「Bob(1)」嗎? – n00dle 2011-05-12 14:22:13

2

您可以返回數據庫中具有該名稱的人數,然後添加1到那個數字。

SELECT COUNT(id) FROM table WHERE name LIKE '$input(%)'); 
+0

這不會計數的名稱(#) – soju 2011-05-12 13:36:06

+1

除非它是零,當然:) 此外,它會混淆馬特和馬修(例如)。 – 2011-05-12 13:36:50

+0

好點!編輯:) – n00dle 2011-05-12 13:38:02

0

像這樣的東西應該做的伎倆:

SELECT * FROM table WHERE name = '$input' OR name LIKE '$input(%)' 

注意,對於這個工作,你需要逃避任何百分號在$input LIKE子句中,否則他們將視爲通配符。

0

使用,用於檢查字符串的末尾有兩個括號之間的整數正則表達式。如果存在一個整數,則給它加1。

0

你也可以嘗試做周圍用另一種方式,使name領域獨樹一幟,並嘗試輸入它在一個while循環,如果失敗添加($i)$i++每次迭代。

//編輯: 與使用做一個like比較,你會得到誤報解決方案的問題,例如$hi%也算hippie。這給你不必要的(1)添加!

相關問題