2010-06-14 6 views
5

간단한 인벤토리 요청 시스템을 만들려고합니다. 사용자는 인벤토리 데이터베이스를 쿼리하는 여러 SKU를 입력 할 수 있습니다.PHP로 여러 개의 MySQL 쿼리를 연결 하시겠습니까?

제 문제는 이러한 여러 쿼리를 일종의 목록으로 연결하는 것입니다. 이 목록은 나중에 검색 할 수 있으며 동시에 제출 된 모든 쿼리를 포함합니다. 목록이 채워지면 목록을 삭제할 수 있습니다.

이것이 가능합니까? 나는 지금 막 올바른 방향으로 지적되고 싶다.

감사 테이블이 같은

+0

어떤 종류의 목록을 원하십니까? DB 또는 다른 목록에 저장 하시겠습니까? – 1s2a3n4j5e6e7v

+0

동일한 DB에 저장하는 것이 좋습니다. – cds5059

답변

0

확인 :

ListNumber SKU 
1   5423 
1   5432 
1   6542 
1   6543 
2   5411 
3   6542 
3   5411 
3   5423 

그리고 간단하게 수행하여 목록 1의 SKU를 검색 :

SELECT SKU FROM Table WHERE ListNumber=1; 
+0

목록에이 SKU를 동시에 추가하면 모두 동일한 ListNumber를 포함하게됩니까? – cds5059

+0

sessionId를 키로 사용하는 것이 더 현명 할 수 있습니다 (세션 리퍼를 통한 정리도 제공함).하지만 같은 세션에서 여러 창과 관련되어 있음을 알고 있어야합니다. – symcbean

0

당신 수있는 (listNo, SKU, 타임 스탬프를 사용) 테이블 구조. 타임 스탬프는 인벤토리가 언제 어떻게 쿼리되는지를 분석하는 데 도움이됩니다.

+0

나는 Timestamp 아이디어를 좋아한다. 같은 시간 소인을 포함하도록 모든 쿼리를 동시에 추가하는 방법은 무엇입니까? 동시에 여러 SKU가 쿼리됩니다 – cds5059

+0

예. 왜 당신은 "같은 시간"으로 제한되기를 원하십니까? 그냥 now() 함수를 제공하십시오. 삽입 타임 스탬프를받습니다. – 1s2a3n4j5e6e7v

+0

당신은 세션에 목록을 저장하지 않으므로 항상 올바른 목록에 추가됩니다. 또는 사용자가 열려있는 세션이 여러 개인 경우 IP 주소 나 사용자/로그인 이름 등의 다른 고유 ID를 사용하십시오. – Steve

1

내가 제대로 문제를 이해하면 누군가가 테이블에서 여러 SKU를 검색 할 때 데이터를 검색하는 쿼리를 찾고 있습니다. 그 맞습니까? 다음 쿼리를 참조하십시오.

SELECT some_data FROM some_table WHERE sku IN ('SSDF3','GHG56',...'HG09'); 
0

여기에서 원하는 내용을 다소 볼 수 있습니다. 당신은 여러개의 삽입물을 가지고 있는지 확인하고 각 트랜잭션과 관련된 일종의 일관된 ID를 가지고 있는지 확인하기를 원합니다. 타임 스탬프 접근 방식을 사용하면 모두 동일한 초에 삽입된다는 보장이 없습니다.

MySQL에 동시에 행을 삽입하는 것은 매우 어렵지만 작동 할 수있는 제안이 있습니다. 나는 당신이 거래를 시작하고, 다음으로 가장 높은 ID 번호를 찾고, 나중에 그 모든 행을 삽입해야한다고 생각합니다.

  • $transRes = mysql_query("START TRANSACTION");
  • $nextListRes = mysql_query("SELECT max(listNumber) FROM InventoryRequests");
    1. $nextListRes에서 결과를 가져 오기이 증가 값을 사용하여 SKU를 위해 1
    2. 실행 INSERT 쿼리를 추가합니다.
    3. $commitRes = mysql_query("COMMIT");

    당신은 경쟁 조건이있을 수 있기 때문에이 트랜잭션 (transaction)가 아닌 두 개의 쿼리이 있는지 확인하려면 어디에서 실행중인 PHP 코드를 동시에 (아주 나쁜 일이 5 월 SELECT의 두 인스턴스!).

    또한 서브 쿼리 방법을 생각하고 있었지만 실행될 때마다 각각 INSERT 문이 실행될 때마다 MAX(listNumber)이 달라 지므로 동일한 ID를 가지지 않습니다. 싶습니다. INSERT에 대한 준비된 문구를 살펴볼 수도 있습니다.

  • 0

    잘 모르겠지만 장바구니를 만들거나 초보적인 주문 이행 시스템?

    그럴 경우 SKU의 "주문"과 쉼표로 구분 된 목록 (Sjoerd의 대답과 유사하지만 목록 ID 결정에 대해 걱정할 필요는 없습니다)을 저장하는 다른 테이블을 만들 수 있습니다. 나중에 IN() 절에 주입됩니다 (gsharma에 따라). '주문'은 이후에 삭제되거나 비활성 또는 이와 비슷한 것으로 표시 될 수 있습니다.

    1

    SKU에 일치하는 외래 키를 기반으로하는 인벤토리 테이블과 형식 목록을 모두 조인하는 다 대다 테이블 인 데이터베이스의 다른 테이블과 테이블을 연결해야합니다.

    YOU CAN QUERY THE FOLLOWING 
    SELECT inventory.* FROM inventory LEFT JOIN InvLinkedList ON InvLinkedList.SKU = Inventory.SKU WHERE InvLinkedList.typeID = 2 
    

    당신은 모든 항목, 열 등의 ID 및 유형을 가진 InventoryType 테이블과 두 개의 인덱스 컬럼 (SKU 및 TYPE의 ID)와 많은 연결 표 InvLinkedList에 많은으로 재고 표가 필요합니다. 이 테이블의 관계를 정의해야합니다. 여기서 ON DELETE는 CASCADE 유형 목록에 있습니다. 따라서 유형을 삭제할 때 InvLinkedList에 typeID가있는 행이 제거되지만 Inventory의 항목은 제거되지 않습니다. SKU를 사용하여 항목을 제거하면 반대가 발생합니다.

    이 해결책이되기를 바랍니다. 여러 유형의 경우 위에서 정의한 유형의 쿼리를 반환하는 PHP 함수를 만들 수 있습니다.

    관련 문제