2012-03-29 2 views
0

나는 mysql과 전자 상거래 상점에서 매우 흔한 문제라고 생각하는 것을 만났다.많은 테이블에서 카트의 총 금액 (가격)

나는 하나의 제품 테이블을 가지고 있지는 않지만 많은 제품을 가지고 있습니다 ... 예를 들어 한 가게에 비닐, 스튜디오 장비 등이 있습니다 ... 그래서 제품 정보가 다른 테이블이 많습니다. 나는 많은 테이블 당신은 아마 당신이 날 수의 SUM()을 얻을하는 방법을 보여 도움이 될 수 있습니다 .. 내가 추한 방법을이를 만들어 볼 수 있듯이

public static function GetTotalAmount() { 
    $params = array(
     ':cart_id' => self::GetCartId() 
    ); 
    $sql = 'SELECT SUM(v.price) AS total_amount '. 
      'FROM shopping_cart sc '. 
      'INNER JOIN vinyl v '. 
      'ON sc.product_id = v.id AND sc.department_id = 1 '. 
      'WHERE sc.cart_id = :cart_id AND sc.buy_now;'; 
    $v = DataBase::FetchOne($sql, $params); 
    $sql = 'SELECT SUM(sg.price) AS total_amount '. 
      'FROM shopping_cart sc '. 
      'INNER JOIN studio_gear sg '. 
      'ON sc.product_id = sg.id AND sc.department_id = 2 '. 
      'WHERE sc.cart_id = :cart_id AND sc.buy_now;'; 
    $sg = DataBase::FetchOne($sql, $params); 
return $sg + $v; 
} 

에서 장바구니에 제품의 총 금액 (가격)을 얻을 필요가있다 N 개의 테이블은 N.price에서 계산됩니다. 하나 개의 테이블에 모든 제품 테이블을 병합하고 그에서 작동 (당신은 또한 카테고리를 구현해야합니다 및 사용자 정의는 속성 -

답변

0

당신은 (당신이 할 수있는 경우) UNION 모든

SELECT SUM(price) FROM ((SELECT SUM(price) as price FROM table1 WHERE ...) UNION ALL (SELECT SUM(price) as price FROM table2 WHERE ...) UNION ALL ....) 

빠른 팁을 사용할 수 있습니다 제품). 그렇지 않으면 새로운 상점을 추가 할 때 엉망이됩니다.

+0

정말 감사합니다! 하나의 테이블에 제품을 병합합니다. – user1300577

0
당신은 제품 테이블의 단지 필요한 열이있는 (구체화)보기를 만들 수 있습니다

- product_idprice

당신이보기 (vw_products)는 내부 다만 수가 있으면 함께 쇼핑 카트 테이블의 조인 보기 및 합계를 얻을.

SELECT sum(vw.price) FROM 
shopping_cart sc INNER JOIN vw_products vw 
ON sc.product_id = vw.id and sc.department_id IN (1,2,...) 
WHERE sc.cart_id = :cart_id AND sc.buy_now; 

당신은 많은 행이있는 경우와 가격은 종종 를 (몇 분 간격)을 변경하지 않으면 나는 테이블을 생성하고 위의 쿼리의 결과를 채우는 건의 할 것입니다.

매일 또는 가격을 변경할 때마다이 표를 새로 고칠 수 있습니다.

0

하지 대답하지만, FWIW, 내가 읽기이 쉽게 찾을 수 ...

$sql = " 
SELECT SUM(v.price) total_amount 
    FROM shopping_cart sc 
    JOIN vinyl v 
    ON sc.product_id = v.id 
    AND sc.department_id = 1 
WHERE sc.cart_id = :cart_id 
    AND sc.buy_now; 
"; 

$v = DataBase::FetchOne($sql, $params); 
관련 문제