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'로 단순화 할 수 있습니다. 둘째, 새로운 OID 생성은 생성 및 후속 사용을 잠 그거나 트랜잭션 방식으로 보호하지 않는 한 위험합니다. 셋째, 전혀 이런 식으로하지 마십시오. 대신 브렌든의 대답을보십시오. – pilcrow

+0

고마워요 ... 당신 말이 맞아요. 브렌든의 대답은 내가 필요한 것입니다. –

+0

어리석은 질문 이었기 때문에 나는 투표를 중단 했습니까? –

답변

1

당신은 아마 auto-increment columns를 사용하려면 :이 최선의 방법 인 경우 다음 OID 번호와 궁금입니다. 이렇게하면 데이터를 삽입 할 수 있으며 MySQL은 인덱스를 선택합니다. 이 작업을 수행하려면 데이터를 비정규 화해야합니다.

당신은 두 개의 테이블을 할 것입니다 : 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를 사용하려고하는 두 주문에 대해 걱정할 필요가 없습니다. 또한 주문 정보는 주문의 각 항목에 대해 중복되지 않습니다.

+0

나는 아주 간단한 것을 놓친다는 것을 알았다. 이것은 완벽하게 이해할 수 있습니다. 맞춰서 나를 밀어 붙일 다른 머리가 필요하다고 생각해. 고맙습니다!! –