来自许多表的购物车中的Mysql总金额(价格)

时间:2012-03-29 11:13:47

标签: mysql sum

我遇到了我认为是mysql和电子商务商店的一个非常普遍的问题......虽然我找不到答案。

我的商店里面没有一个产品表但很多...例如在一个商店里有乙烯基,工作室装备等...所以我们有很多桌子有不同的产品细节......事情是我需要从许多表格中获取购物车中产品的总金额(价格)

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.price获得可能的N个表格的SUM()。

3 个答案:

答案 0 :(得分: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  ....)

快速提示(如果可以的话) - 将所有产品表合并到一个表中并对其进行操作(您还必须实现产品的类别和自定义属性)。否则,当你添加新商店时,你会变得一团糟。

答案 1 :(得分: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;

如果你有很多行,而且价格不经常变化(每隔几分钟) 我建议创建一个表并用上面的查询结果填充它。

每天或每次更改价格后,您都可以刷新此表。

答案 2 :(得分: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);