문제

MySQL과 PHP를 사용하고 있습니다. 열 ID와 수량이 포함 된 테이블이 있습니다. 합액 40에 도달 할 때 마지막으로 합계 수량 인 행의 ID를 검색하고 싶습니다. 더 구체적으로. 데이터베이스에 3 행이 있습니다. 하나는 수량 10, 하나는 수량 30, 수량 20이 있습니다. 따라서 결과를 40을 갖도록 수량을 요약하면 처음 두 마녀를 요약 할 것입니다. 숫자 40은 2입니다. 40의 합을 완성하는 데 사용되는 마지막 행의 ID를 알고 싶습니다.

질문하면 더 자세한 내용을 알려 드리겠습니다. 감사합니다!!


이런 식으로 말씀 드리겠습니다. 정말 6 개의 제품이 있습니다. 첫 번째는 10 일 날짜에 내가 소지했고, 다음 3 명은 11 일에 왔고 마지막 2는 12 일에 왔습니다.

이제 내 주식에서 3 개의 제품을 판매하고 싶습니다. 그들이 오는 순서대로 그들을 팔고 싶어합니다. 따라서 3 개의 제품을 원하는 고객의 경우 11 개 제품에서 10과 2 제품으로 제공되는 제품을 판매 할 것입니다.

2 개의 제품을 원하는 다음 고객의 경우, 11 개의 제품이 마지막 3 개 제품에서 남아있는 1 개의 제품과 12 개 제품의 제품을 판매 할 것입니다.

문제는 내가 판매 한 각 제품이 어떤 가격으로 판매되었는지 어떻게 알 수 있습니까? 요청 된 모든 행이 어떤 행을 합산하는지 알 수 있다면 주문을 전달할 때마다 합계를 시작할 위치를 알고있을 것이라고 생각했습니다. 따라서 먼저 어떤 행이 3 개의 제품을 합산하고 항목 ID를 유지합니다. 다음 순서의 경우 해당 ID에서 카운트를 시작하고 2 개의 제품의 두 번째 주문 등을 요약 할 때까지 합계가됩니다. 나는 이런 식으로 각 제품의 들어오는 가격을 추적 할 수 있다고 생각했다. 그래서 저는 첫 번째 가격을 사용하여 12 일부터 제품을 판매하지 않을 것입니다.

난 당신이 이해 바랍니다. 나는 단지 내 제품의 가격이 어느 가격을 가지고 있는지 알아야하므로 첫 번째 제품은 하나의 가격을 가질 것이지만 제품 가격이 상승함에 따라 가격도 인상해야합니다. 그래서 마지막 제품은 판매해야합니다. 더 높은 가격. 내가 이것을 추적하는 경우에만 달성 할 수 있습니다 ...

매우 감사합니다.


아무도? 또는 더 쉽게 : MySQL은 필요한 줄에 필요한 행을 선택해야합니다 (quantity) 예를 들어 40과 같이 높거나 동일합니다. 그런 다음 합계 프로세스에 참여한 마지막 행의 ID를 저에게 얻습니다.

도움이 되었습니까?

해결책

나는 당신의 질문을 너무 잘 이해하지 못합니다. 더 적절하게 reword를 시도해 볼 수 있습니까? 내가 해석 한 바에 따르면 다음은 데이터베이스의 구조입니다.

ProductID    ArrivalDate
   1          10
   2          11
   3          11
   4          11
   5          12
   6          12

이제 당신은 "어떻게 알 수 있을까 어느 가격은 내가 판매 한 각 제품을 가지고 있었습니까? "데이터베이스의 각 값에는 가격 속성이 없기 때문에 어떤 종류의 혼란을 일으키는가. 데이터베이스는 다음과 같이 보이지 않아야합니다.

ProductID    ArrivalDate    Price
   1          10              100
   2          11              200
   3          11              300
   4          11              300
   5          12              400
   6          12              400

개인적으로 판매 가격을 찾는 당신의 아이디어는 결함이 있다고 생각합니다. 데이터베이스에 몇 가지 더 필드를 추가하는 것이 더 합리적입니다.

ProductID    ArrivalDate    Price     InStock   DateSold
   1          10              100       Yes        17
   2          11              200       Yes        17
   3          11              300       Yes        18
   4          11              300       Yes        18
   5          12              400       no        
   6          12              400       no        

데이터베이스를 변경할 때 제품이 도착하는시기, 판매 날짜, 가격, 수량을 쉽게 추적 할 수 있습니다 (실제 필드인지 아닌지는 알 수 없습니다).

또한 SQL 쿼리를 분리하거나 일부 작업을 수행하기 위해 일부 코드를 추가하여 인생을 더 쉽게 단순화하고 삶을 쉽게 만들 수 있습니다.

다른 팁

총이 실행되는 세 번째 열이 있습니다. 그런 다음 실행 중 총 <= 대상 값이있는 마지막 행을 되돌릴 수 있습니다.

따라서 테이블은 다음과 같습니다.

ID    Quantity    RunningTotal
1           10              10
2           30              40
3           20              60

참고 : 테이블에서 행을 삭제하면 모든 후속 행을 업데이트하십시오. RunningTotal -= DeletedRow.Quantity!

테이블 ID에 의존하는 것은 아마도 이것에 대한 나쁜 생각 일 것입니다. 그러나 그것이 실제로 수행되는 방식이라면, 이와 같은 것을 시도 할 수 있습니다 (테스트되지 않음).

SELECT yourTableA.id
  FROM yourTable AS yourTableA
  JOIN yourTable AS yourTableB
 WHERE ( yourTableA.value + yourTableB.value ) = 40
   AND yourTableA.id != yourTableB.id
 ORDER BY yourTableA.id

이 유형의 솔루션은 대상 합계와 동일하기 위해 두 개의 행만 필요할 것으로 예상하는 경우에만 작동합니다. 이 경우에는 그렇지 않을 가능성이 높기 때문에 최선의 방법은 아마도 모든 행을 시도하고 반환 된 데이터에서 프로그래밍 방식으로 수행하는 것입니다.

LC가 게시 한 Running Total 솔루션도 일반적으로 계산 된 데이터를 저장하지 않으려 고 노력하지만 좋은 옵션입니다.


이 요청의 업데이트 된 정보를 기반으로 대체 답변이 있습니다.

인벤토리에 관심이있는 것처럼 들리지 않습니다. 제품이 들어 왔을 때 더 관심이 있습니다.

SELECT *
  FROM product
 ORDER BY product.receivedData

각 레코드가 들어 오면서 각 레코드를 처리하고 해당 레코드의 가격을 저장 한 다음 필요한 품목 수에 도달 할 때까지 필요한만큼 계속 진행하십시오. 항목 목록, 해당 레벨의 인벤토리 수 및 해당 수준의 가격으로 끝나야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top