2010-07-12 25 views
1

我有一個DB表中的訂單表的MySQL表,這個表有一個自動增量的ID。直到現在,我們還有一般的數字Order-ID,同樣是1,2,3,4,5 ...從現在開始,我必須將A20系列添加到我的ID中,比如A20103,A20104,A20105等等,以及最後一個三位數字達到999後附的系列應更改爲A21001,A21002,A21003等等,同一系列必須添加到先前添加的訂單中。如何在任何表中增加一系列字符串以增加id?

我該如何實現此任務?請指導

+0

是您的主鍵從您的訂單id列單獨的列?你不能有一個字母數字的AUTO_INCREMENT列。另外,你的例子還不清楚。您是否只想在您的訂單ID前添加「A2」,以便訂單ID 1變爲'A20001',訂單ID 999變爲'A20999',訂單ID 1000變爲'A21000'? – Mike 2010-07-12 12:45:37

+0

是的主鍵是orderid,我需要追加A20到我的id像A20001爲id = 1,A20002爲id = 2等等,當我達到id = 999時,它應該是A20999,下一個ID應該成爲A21001 – 2010-07-12 12:47:51

+1

爲什麼需要從A20999跳到A21001?有沒有理由錯過A21000? – Mike 2010-07-12 12:52:04

回答

1

沿的線的東西:

"AR2" . str_pad((int) $ordernumber, 4, "0", STR_PAD_LEFT); 

吉姆

[編輯] - 我假設這是用於顯示目的如在別處所述,在DB中的ID字段是整數!!

+0

是的它只是爲了得到一個合適的字母數字orderid – 2010-07-12 12:42:25

+0

MO - 在這種情況下,你會延長想要在SQL中做'填充'。可能與此類似:concat('A',LPAD(orderid,5,'0')) – 2010-07-12 12:52:41

1

您不能有一個不是數字字段的自動增量。您將更好地保留當前的自動遞增列,並添加一個新的,您將根據您的規則手動計算。

您可能想要使用MAX()函數獲取最新訂單並生成下一個值:請記住在事務中執行該操作。

您可以創建一個函數或觸發器,爲您乾淨地插入。

+0

+1我的客戶要求我將訂單ID更改爲此格式,因爲訂單ID在任何地方都可以使用,字母數字格式,他需要這種方式... – 2010-07-12 12:41:04

0

您不能將前綴直接添加到數據庫。但是,選擇它時可以預先設定它。

SELECT concat('A', id) as id FROM table 

爲了得到從20000開始的效果,您可以設置自動增量的起始值。

3

改變現有的auto_increment列聽起來不是一個好主意 - 你真的必須這樣做嗎?相反,爲什麼不修改您的選擇查詢以返回適當格式的ID?通過這樣做,您可以保持參照完整性,並且您可以隨時在將來隨時更改訂單ID格式,而無需更新數據庫。

SELECT id, CONCAT('A2', LPAD(id, 4, '0')) AS order_id FROM <table>; 

輸出示例:

+------+----------+ 
| id | order_id | 
+------+----------+ 
| 1 | A20001 | 
| 2 | A20002 
... 
| 999 | A20999 | 
| 1000 | A21000 | 
| 1001 | A21001 | 
+------+----------+