2011-12-18 40 views
0

我正在使用下面的函數來創建一個以字母爲前綴的唯一字段。 如果它用於與許多用戶進行交易,會造成任何問題嗎? 這種情況是,這個函數在一個循環內被調用,並且如果有許多用戶同時使用這個系統。這是否會導致任何錯誤?有沒有更好的方法來做到這一點?我使用GLAccountID作爲其他表的外鍵。mysql字段中的問題值前綴

function getID(){ 
    global $db; 
    $max_gl = $db->get_var("SELECT MAX(GLAccountNumber) FROM sys_glaccount"); 
    if($max_gl == null){ 
     $max_gl = 1; 
    }else if($max_gl > 0){ 
     $max_gl = $max_gl + 1; 
    } 
    return 'GLA'.$max_gl; 
} 

該表看起來像這樣,GLAccountNumber是主鍵,我將其設置爲自動增量。

enter image description here

回答

2

有辦法做到這一點,但你真的不應該。認真。這是沉重的和危險的,開發者在晚上會哭一點。

請考慮使用accountNumber,只需在檢索GLA時添加GLA?這樣你就可以獲得auto-id的簡單,快速和正確,並且可以在你想要的時候對其進行美化。

另一種選擇是使它成爲一個組合鍵,一列中的前綴和自動增量中的數字,儘管我不明白你爲什麼要這樣做。

最後,如果你要做的就是加三個字母,你並不需要真正做到這一點在同一個領域:)

+0

這是如何危險? – 2011-12-18 12:54:45

+0

如果你這樣做,而另一個用戶同時做同樣的事情,你會得到2個相同的accountID,但有一個accountnumber不同。如果你鎖定桌子,東西變慢。 – Nanne 2011-12-18 12:59:45

1

其實你可以得到的格式,你想沒有一個帳戶ID新行:

SELECT CONCAT('GL',GLAccountNumber) AS GLaccountID FROM `sys_glaccount` 

而不是做一個全新的塔只是引用......

另外,如果你的目的是爲了避免與同一領域的混亂,你可以使用

SELECT g.GLAccountNumber FROM `sys_glaccount` g INNER JOIN `sys_glaccount2` g2 ON g2.GLAccountNumber=g.GLAccountNumber 

沒有查詢變得沒有唯一字段名稱混淆