我遇到了我认为是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()。
答案 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_id
和price
获得视图(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);