2011-04-17 81 views
-7

可能重複:
Add a field and insert an increment valuePHP - 腳本,在數據庫中添加一個有序場

我有我的數據庫這個表在MySQL:

id ref  data 
1 111  data1 
2 111  data2 
3 111  data3 
4 111  data4 
5 222  data1 
6 222  data2 
7 222  data3 
8 333  data1 
9 333  data2 

和我'd喜歡插入一個新的字段,例如訂單,其中對於ea參考,我會設置一個月牙值。所以輸出應該是:

id ref  data order 
1 111  data1 1 
2 111  data2 2 
3 111  data3 3 
4 111  data4 4 
5 222  data1 1 
6 222  data2 2 
7 222  data3 3 
8 333  data1 1 
9 333  data2 2 

我該怎麼辦?更新在我看來undefined ..所以我應該按照表的id命令它們...

+0

這實際上與PHP沒有任何關係。編輯/維護數據庫模式通常在數據庫中完成。 PHP只是使用數據庫的應用程序(通常需要更新新模式)。 – David 2011-04-17 21:10:21

+0

你爲什麼開始一個新的線程? OMG小馬已經回答了你。 http://stackoverflow.com/questions/5695217/add-a-field-and-insert-an-increment-value。 – 2011-04-17 21:18:43

回答

2

不要將其命名字段order是MySQL中的保留字,它是使用保留字作爲字段名稱麻煩。 讓我們將其命名爲rank

-- first add new field. 
alter table table_name add column rank int(3); 

-- then fill the field with a rank. 
set @rank = 0; 
set @ref = null; 
update table_name set rank (
    select rank from (
    select 
     if(@ref <> ref,@rank:= 1,@rank:= @rank+1) as rank 
     if(@ref <> ref or @rank = 1,@ref:= ref, ref) as dummy 
    from (
     select ref from table_name order by ref, id 
    ) 

) 
); 

-- use the following select to get the next rank to insert. 
select @newrank:= max(rank)+1 as newrank from table_name where ref = '333'; 
+0

這不是一個麻煩,你只需在你的標識符周圍使用'backquotes',你應該做的任何事情 – meagar 2011-04-18 16:37:57

+0

仍然所有這些東西使事情複雜化(如果只是稍微)併發症導致錯誤和時間花費調試的機會更大。最好不要使用保留字IHMO – Johan 2011-04-18 18:31:16

2

如果你想添加新的字段到你的表中,這裏是語法(雖然我不知道我完全理解你的問題):

alter table `table_name` add column `order` int(3); 
+0

是的,但它不添加漸進式索引... – markzzz 2011-04-17 21:09:45