2012-02-20 3 views
2

간단한 장바구니를 만들려고합니다. 일반적으로 제품 수량이 0이면 지금 구매 버튼이 사라지고 재고 텍스트가 표시됩니다.같은 시간에 여러 프로세스가있는 경우 어떻게 mysql 삽입을 처리합니까?

현재 제품에 1 개의 수량이 남아 있고 동시에 2 명의 구매자가 제품을 구매하게한다고 가정 해 보겠습니다. 체크 아웃 페이지에 이미있는 구매자는 더 이상 사용 가능한 수량을 계산하지 않습니다.

이 경우 어떻게이 부분의 유효성을 검사합니까? 첫 번째 제공 프로세스 기반을 원한다. MySQL에 처음 삽입되는 제품은 그렇지 않다면 스크립트는 제품 페이지로 돌아갈 것이다.

날 ..

답변

3

단일체, 따라서 아마도 가장 좋은 방법을 알려 - 항목이 삽입 페이지에 재고가 있는지 확인하기 위해 동일한 스크립트를 사용합니다. 품목 재고가없는 경우 오류 메시지를 표시하십시오. 재고가 없다면 구매하십시오.

동일한 선택을 다시 추가하기 만하면됩니다.

또는 스키마에 따라 판매 후 수량을 업데이트 할 때 업데이트 쿼리에 where 절을 추가하십시오. 수량 = 구입 수량입니다. 그런 다음 영향을받은 행 수를 확인하십시오. 영향을받는 행 수가 0이면 판매가 진행되지 않았다는 것을 알 수 있습니다. 재고 없음 오류 메시지를 표시하십시오.

또는 바람직하지 않은 soluation - 페이지 잠금. 첫 번째 사용자가 페이지를 방문하면 누가 어떤 페이지에 있는지 추적하는 표에 행을 삽입하고 다른 용도로는 해당 페이지로 이동하지 못하게합니다. 그런 다음 두 번째 사용자가 페이지로 이동하면 오류 메시지가 나타납니다. 그런 다음 첫 번째 사용자가 트랜잭션을 완료하면 누가 페이지를 잠근 것과 동일한 세션 ID가 현재 트랜잭션을 완료하고 있는지 확인합니다.

+0

Phpmeh & 나에게 좋은 설명을 주셔서 감사합니다 :) – kampit

1

처리하기 전에 아직 재고가 있는지 확인해야합니다. 트랜잭션과 관련된 모든 스크립트를 실행 한 후에 한 번에 하나의 구매 만 수행 할 수있을 때까지 트랜잭션 시작시 테이블에 잠금을 설정할 수 있습니다.

1

잠금을 사용할 수 있지만 몇 가지 문제가 발생할 수 있습니다. 둘째, 다른 사용자를 잠글 것입니다.

조사에 따르면 사람들은 실제 구매할 때보 다 많은 시간을 카트에 추가하고 추가하는 것으로 나타났습니다. 따라서 일반적으로 카트에 넣은 제품에는 자물쇠를 두는 것이 좋습니다.

@phpmeh가 좋은 대답을주었습니다.

+0

안녕하세요! +1! – phpmeh

0

견적을 만들 때 (제품을 장바구니에 추가 할 때) 이미 qty를 예약하려고합니다.

관련 문제