2011-04-18 22 views
0

我已經有數百人加入我的網站併爲他們創建會員ID。我剛剛在數據庫中創建了一個名爲user_no的新列。php手動增量會員號碼

  • 什麼是mysql查詢增加成員資格no。
  • 是否有可能開始與AE然後數,即:AE0001,AE0002,......並與4號不AE1,AE2 ..

MySQL查詢開始:

UPDATE user SET user_no=..?? 

在PHP方面,我如何增加它?如果有新成員加入。

$db->query("INSERT INTO user (user_no) VALUES(AE'$user_no')"); 
+5

爲什麼不使用MySQL的auto_increment功能?爲什麼要創建自己的櫃檯?爲什麼在數據庫本身的數字中附加「AE」,如果你可以在通過php輸出成員的id的時候這樣做呢?它背後的理由是什麼? – 2011-04-18 12:25:21

+1

爲什麼不使用'auto_increment'主鍵列? – knittl 2011-04-18 12:25:47

+0

你的意思是要給每個用戶一個特定的ID? – 2011-04-18 12:26:15

回答

3

爲什麼不使用自動增量字段並將AE附加到它?自動增量將被MySQL進行,所以你不必擔心它在PHP:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

,並顯示在AE0001格式的用戶密鑰,你可以做

$id = 'AE' . str_pad($autoincrementid, 5, "0", STR_PAD_LEFT); 

http://php.net/manual/en/function.str-pad.php

+0

鑑於OP希望'user_no'字段的值與主鍵ID相同,那麼這可能是正確的解決方案。你也可以使用'sprintf()'來格式化字符串。但要注意填充太短 - 使用上面描述的格式,僅在10000個用戶之後,您將用盡空間。這聽起來很多,但如果您的網站成功了,它可能不會花費很長時間,並且稍後修復可能會很痛苦。 – Spudley 2011-04-18 12:51:52

+0

@Spudley,絕對。我只填充到5,因爲OP提到了'AE0001'。你不應該一點點填補一旦它擊中10k – JohnP 2011-04-18 12:55:48

2

我同意所有其他人說你應該簡單地使用MySQL自動增量功能。這就是它的目的。

可以使用MySQL的MAX()函數編寫自己的函數來查找表中當前字段的最大值。但是,除非您使用一些非常強大的事務代碼,否則總是有這樣的危險,即當兩個用戶完全同時創建帳戶時,此方法會導致創建重複記錄。

避免這種情況所需的代碼量並不小,如果您缺乏足夠的經驗不會看到使用自動增量功能的好處,那麼您不太可能做到這一點。

自動遞增的重點是讓您無需每次都實現所有代碼。

此外,由於性能原因,強烈建議爲主鍵使用整數值。當然,您可以將其顯示爲"AE" . $id,但您應該將其作爲整數存儲在數據庫中。

+0

@Spudley:謝謝:)我同意了!我剛剛獲得另一個uniq id用於不同的目的。 – tonoslfx 2011-04-18 12:37:25

+0

@ boyee007 - 你想讓'user_no'號碼與記錄的主要ID相同,前面是'AE'嗎?還是它將成爲一個完全獨立的序列? – Spudley 2011-04-18 12:42:12

+0

@Spudley:是的,他們不會是同一個ID!區別在於:它以'AE'和4個數字開頭。以及..可以附加AE在PHP方面或哪種方式最好。任何好的解決方案 – tonoslfx 2011-04-18 12:45:43