2011-10-27 5 views
-1

注文を格納するテーブルがあります。
id(自動インクリメント)、oid(自動インクリメントされない)、次に注文の詳細。
いくつかの受注は、私はIDとOID(注文ID)を持っている理由これは、複数のエントリを持つことができ ので、あなたは3 xwidgetsと4Zwidgetsを注文した場合、彼らは同じ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'に単純化することができます。第2に、新しいOIDの生成は、その世代およびその後の使用をロックするか、またはトランザクションで保護しない限り、危険です。第三に、このようにしないでください。ブレンダンの答えを見てください。 – pilcrow

+0

ありがとうございました...あなたは正しいですブレンダンの答えは私が必要なものです。 –

+0

私は愚かな質問だったので、投票しましたか? –

答えて

1

おそらくauto-increment columnsを使用したい:これが最善の方法である場合は、次のOID番号とは思っています。これにより、データを挿入することができ、MySQLはインデックスを選択します。あなたはこれを行うにはあなたのデータを非正規化する必要があります。

は、次の2つのテーブルをお勧めします:ordersorder_items、どこ:order_idそのMySQLのセットを記録

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


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

挿入NULLorder_idordersテーブルに秩序と。あなたが持っているorder_idを使用してorder_itemを挿入し、item_idを自動生成させます。

このように、MySQLでは数字が生成されるため、同じ注文IDを使用しようとする2つの注文について心配する必要はありません。また、オーダー情報はオーダー内の各項目に複製されません。

+0

私は何かが非常に簡単に行方不明だったことを知っていた。これは完璧な意味合いがあります。私はちょうど正しい方向に私を押して別の頭が必要だったと思う。ありがとうございました!! –

関連する問題