2011-10-27 41 views
-1

我有一個存儲訂單的表。
id(自動遞增)oid(不自動遞增),然後是訂單詳細信息。
一些訂單可以有多個條目,這就是爲什麼我有一個ID和一個OID(訂單ID) 因此,如果您訂購3個xwidgets和4Zwidgets他們在相同的OID訂單輸入的遞增表列

去我使用下面的代碼分配接下來的OID數字,我想知道如果這是最好的方法:

$maxquery = mysql_query("SELECT MAX(oid) FROM ordr") or die(mysql_error()); 
$maxresult = mysql_fetch_array($maxquery); 
$maxid = $maxresult['MAX(oid)']; 
$oid = $maxid + 1; -- this gives me a new OID for the next entry since i can not auto increment this column 
+0

首先,您可以將SQL簡化爲'SELECT MAX(oid)+ 1 AS next_oid FROM ordr'。其次,除非您鎖定或以其他方式保護其生成和後續使用,否則生成新的OID是有風險的。第三,不要這樣做 - 請參閱布倫丹的回答。 – pilcrow

+0

謝謝你......你是對的布倫丹的回答是我所需要的。 –

+0

是否因爲那是一個愚蠢的問題而被拒絕投票? –

回答

1

你可能想使用auto-increment columns。這會讓你插入數據,MySQL會爲你選擇一個索引。您需要對數據進行非規範化以完成此操作。

你會想兩個表:ordersorder_items,其中:

orders 
------ 
order_id 
[any other columns] 


order_items 
----------- 
item_id 
order_id 
[any other columns] 

插入的順序爲orders表與NULLorder_id並記錄order_id,MySQL的集合。現在使用order_id插入order_item,讓它自動生成item_id

通過這種方式,MySQL將生成數字,因此您不必擔心嘗試使用相同訂單ID的兩個訂單。此外,訂單中的每個商品的任何訂單信息都不會重複。

+0

我知道我錯過了一件非常簡單的事情。這非常合理。猜猜我只需要另一個腦袋就能把我推向正確的方向。謝謝!! –