2012-03-29 18 views
0

私はmysqlとeコマースショップで非常に一般的な問題だと思ったものに会いました...私はこれに対する答えを見つけることはできません。多くのテーブルからMysqlの合計金額(価格)

私は1つの製品テーブルを持っていないが、多くの場合...例えば、ある店舗にはビニールやスタジオギアなどがあるので、製品の詳細が異なる多数のテーブルがある。私は多くのテーブルあなたは多分あなたは私に可能性の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をALL

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

どうもありがとうございました!私は1つのテーブルに製品をマージします – user1300577

0

あなたは、製品テーブルのちょうど必要な列を持つビューを(マテリア)を作成することができます - あなたはビュー(vw_products)を持っているproduct_idprice

たらあなただけの内部はとショッピングカートのテーブルの結合を行うことができをビューを取得し、合計を取得します。

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); 
関連する問題