2009-03-03 7 views
1

하나의 필드의 합계에서 특정 숫자가 충족 될 때까지 레코드를 선택하는 것에 대해 약간의 게시물이 있지만 거기에는 저에게 맞는 것이 없습니다. PHP와 MySQL을 사용하고 있습니다.MySQL 레코드 중 합계를 선택하십시오.

수량이라는 테이블이 있습니다. 내부에는 제품 이름, 제품 가격 및 제품 수량에 대한 기록이 있습니다. 이 외에도 동일한 제품에 대해 가격이 다른 여러 수량이 있기 때문에 날짜와 위치를 기반으로 마지막 레코드를 선택하는 데 도움이되는 몇 가지 다른 항목이 있습니다. 그래서, 현재이처럼 내 제품 별 가격과 수량을 선택 :이 같은 데이터를 얻을 필요가 있기 때문에

SELECT `price`,`quantity` FROM (SELECT `price`,`quantity` FROM `quantity` WHERE `product_name` = 'DELL' ORDER BY `date` DESC, `position`) AS `Actions` GROUP BY `price` 

이 쿼리는 해결 방법입니다 : 나는이 같은 여러 기록이

product_name | price | quantity 

DELL   |  100 |  30 
DELL   |  120 |  10 
DELL   |  130 |  2 

asuming 그리고 나는 그들 중 최신 것을 얻을 필요가있다. 어쨌든,이 쿼리에서 다음을 수행해야합니다. 다른 제품의 수량과 합산 된 수량이 35 인 레코드를 선택해야합니다. 따라서 30 개 제품을 사용할 수 있기 때문에 제 2 행에서 쿼리를 중단해야한다는 것을 알고 있습니다. 그 가격은 100 달러 였고, 2 라인의 제품은 120 달러였습니다. 그리고 나서 업데이트를 입력해야합니다. 따라서 새 데이터는 다음과 같습니다.

product_name | price | quantity 

DELL   |  100 |  0 
DELL   |  120 |  5 
DELL   |  130 |  2 

어떻게하면이 목표를 달성 할 수 있습니까? 내 세부 사항이 분명하기를 바랍니다. 제발, 어떤 질문을하십시오.

감사합니다.

답변

1

옵션 1 : 대신 쿼리를 사용하여 프로그램 로직 : 고급 데이터베이스 상호 작용을 수행하는 프로그래밍 레이어를 사용하여 아무 문제가 없습니다

. SQL은 모든 것에 대한 대답이 아닙니다 ... (스토어드 프로 시저를 고려해보십시오).

enough = 35 
running_total = 0 

START TRANSACTION 
while running_total < enough: 
    select one record order by price limit 1 FOR UPDATE 
    add to running_total 

UPDATE records... 
COMMIT 

옵션 2 :와 쿼리를 사용하여 실행중인 총 :이 옵션에서

, 당신이 수행하여, 파생 쿼리를 사용하여 전체 실행 한 다음 특정 기록에 그 아래로 필터링 외부 질의 업데이트하려는 경우 올바른 분리 수준의 트랜잭션으로이 내용을 래핑해야합니다.

SET @running_total = 0; 
SELECT 
    row_id, 
    product_name, 
    price, 
    quantity 
FROM 
    (
    SELECT 
     row_id, 
     product_name, 
     price, 
     quantity, 
     @running_total := @running_total + quantity AS running_total 
    FROM 
     sometable 
    WHERE 
     quantity > 0 
    ORDER BY 
     quantity 
    LIMIT 
     35 /* for performance reasons :) */ 
    ) as T1 
WHERE 
    running_total < 35 

더 "명백한"이기 때문에 옵션 1을 선호하는 경향이 있지만, 아마도이 생각 당신에게 음식을 제공 할 것입니다.

+0

첫 번째 방법을 사용했습니다. 나는 그것에 대해 많은 연구를해야한다. 어쨌든, 이것은 시작하는데 도움이되었습니다. 감사 –

관련 문제