2014-11-22 2 views
0

PHP/MySql 프로젝트에서 데이터베이스 행을 연결하는 방법을 찾는 데 어려움을 겪고 있습니다. 내 주문 제출 스크립트는 현재 정보를 분리하여 2 개의 테이블에 저장합니다.MySQL 테이블 관계/외래 키?

첫 번째는 "주문"이라고하며이 포함

두 번째는 "항목"이라고하며이 포함되어 있습니다
$OrderId, $CustomerName, $CustomerEmail, $OrderTotal, $OrderTaxes 
//and other infos about the ORDER 

모든 구매하지 제품 정보를 정기적으로 :

$ProductId, $OrderedQty 
//for each one and such... 

그것은이 있어야한다을 "Items"테이블은 책임있는 명령의 부분 만 표시되는 다른 "부서"에서 검색 될 것이기 때문입니다. 그러나 그들은 모두 운송 목적으로 "주문"정보를 받아야합니다.

"OrderId"열이 "주문"테이블 자체에서 생성 된 기본 키이고 내 INSERT TO 명령이 동시에 실행된다는 것을 알고 있다면 어떻게 둘 다에서 "주문 ID"열을 연결할 수 있습니까? 테이블?

일치시킬 임의의 키를 생성해야합니까?

외래 키를 사용하는 경우 데이터베이스가 동시에 제출 된 이후 어떤 순서로 진행되는지 어떻게 알 수 있습니까?

"주문"-> SELECT $ OrderID -> INSERT를 "항목"에 삽입하는 것이 빠릅니다.

일반적으로 어떻게하나요? 이걸 알아낼 수 없어요.

미리 감사드립니다.

답변

1

구입 한 제품 정보에는 구입 한 제품 테이블에 orderid라는 추가 열이 있어야하므로 어떤 제품이 어떤 순서로 속하는지 알 수 있습니다. 데이터베이스에 삽입하는 방법은 쿼리를 실행하는 데 사용하는 방법에 따라 다릅니다. 이것은 당신이 비슷한 실행할 수있는 경우 경우 일부 쿼리 클래스, 당신은 한 번에 여러 개의 쿼리 문을 실행할 수 있습니다 : 당신이 얻을 다음 주문에 삽입 문을 실행해야합니다 주문의 경우

INSERT INTO Orders (OrderId, CustomerName, CustomerEmail, OrderTotal, OrderTaxes) Values(...) 
SET @order_id = LAST_INSERT_ID(); 
INSERT INTO boughtItems (OrderId,ProductId,OrderedQty) Values (@order_id, :productid_1, :name_1),(@order_id, :productid_2, :name_2),(@order_id, :productid_3, :name_3) .... 

가 기본 키.

다른 경우에는 마지막으로 삽입 한 ID를 얻을 수있는 클래스를 사용할 수 있습니다. 이 ID는 연결 바운드이므로 문제가 없어야합니다 (삽입이 작동하는 한 한 쿼리에서 여러 삽입을 수행하지 않는 경우, 롤백 또는 기타 이상한 작업). 이 경우 삽입을 수행 한 다음 보조 함수를 호출하여 삽입 된 ID를 가져옵니다. 다음 링크를 참조하십시오 : mysql insert id

+0

어떻게 2 명, LAST_INSERT 동시에 자신의 주문을 보낼 때 약 잠재적으로 잘못된 ID를 반환 할 수 있습니까? 게다가, "구입 한 제품 테이블에 orderid라는 추가 열이있어서 어떤 제품이 어떤 순서에 속하는지"내가 얻으려고하는 것이지만 아직 생성되지 않은이 ID 값을 가져야합니다! 내가 뭔가 잘못하고있어. –

+0

LAST_INSERT_ID는 연결 바운드이므로 동일한 연결 내에서 다른 쿼리를 무작위로 사용하지 않는 한 일관성이 있어야합니다. 이 [page] (http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id)를보십시오. – user254948

+0

나에게 "연결 바운드"를 설명해 주시겠습니까? 죄송합니다 :) –