Mysql多表购物车中的总金额(价格)
我遇到了一个我认为mysql和电子商务商店非常常见的问题。。。虽然我找不到答案 我有一个商店,它没有一个产品表,但有很多。。。例如,在一家商店里有乙烯基、摄影器材等。。。所以我们有很多不同产品细节的表格。。。问题是我需要从许多表中获取购物车中产品的总数量(价格)Mysql多表购物车中的总金额(价格),mysql,sum,Mysql,Sum,我遇到了一个我认为mysql和电子商务商店非常常见的问题。。。虽然我找不到答案 我有一个商店,它没有一个产品表,但有很多。。。例如,在一家商店里有乙烯基、摄影器材等。。。所以我们有很多不同产品细节的表格。。。问题是我需要从许多表中获取购物车中产品的总数量(价格) public static function GetTotalAmount() { $params = array( ':cart_id' => self::GetCartId() ); $
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() 您可以使用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 ....)
一个快速提示(如果可以的话)-将所有products表合并到一个表中并对其进行操作(不过您还必须实现产品的类别和自定义属性)。否则,当您添加新店铺时,您将陷入混乱。您可以创建一个(物化)视图,其中只包含产品表的必要列、product\u 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;
如果您有很多行并且价格不经常变化(每隔几分钟)
我建议创建一个表并用上面查询的结果填充它
每天或每次更改价格后,您都可以刷新此表 不是答案,但是,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);
非常感谢!我将把产品合并到一个表中