我正在尝试构建购物车系统。到目前为止,我可以通过一些联接轻松获取用户购物车数据,甚至可以根据用户在另一列中拥有的单价和数量来计算总价。但是,我想知道是否有一种方法可以直接计算直接来自SQL查询的总欠款。请允许我展示一个例子。这是我的桌子:
产品
product_id | product_name | product_price | stock
1 | Pasta | 10 | 50
2 | Bread | 2 | 100
购物车
user_id | product_id | quantity
1 | 1 | 3
1 | 2 | 2
我当前的查询
SELECT
`cart`.`product_id`,
`cart`.`user_id`,
`cart`.`quantity`,
`products`.`product_price` as `unit_price`,
`products`.`product_name`,
`cart`.`quantity` * `products`.`product_price` as `Total`
FROM `cart`
INNER JOIN `products` ON `products`.`product_id` = `cart`.`product_id`
WHERE `cart`.`u_id` = 1;
如您所见,上面的查询将起作用,并向我返回特定用户购物车中的所有产品,并将Total
列添加到结果中,并包含每个项目的总价。
现在,如果要计算总数,则必须读取PHP代码中的每一行并进行总数。尽管可以做到这一点,但我想知道MySQL是否有一种方法可以通过单个查询直接返回总计。
奖金问题:上面的购物车表结构足够好吗?
答案 0 :(得分:0)
您可以在MYSQL中使用“ SUM”运算符直接从数据库获取值。 这是一个文档,您可以在其中获得更多信息: https://www.mysqltutorial.org/mysql-sum/
这里的代码是一个示例:
SELECT SUM(`cart`.`quantity` * `products`.`product_price`) as `CartTotal`
FROM `cart`
INNER JOIN `products` ON `products`.`product_id` = `cart`.`product_id`
WHERE `cart`.`u_id` = 1;
答案 1 :(得分:0)
您可以使用SUM
聚合函数来计算购物车总费用。
SELECT SUM(`cart`.`quantity` * `products`.`product_price`) as `CartTotal`
FROM `cart`
INNER JOIN `products` ON `products`.`product_id` = `cart`.`product_id`
WHERE `cart`.`u_id` = 1;
您还可以使用UNION
构造将购物车总结果合并到主要查询中,例如:
-- Get cart content for user
SELECT
`cart`.`product_id`,
`cart`.`user_id`,
`cart`.`quantity`,
`products`.`product_price` as `unit_price`,
`products`.`product_name`,
`cart`.`quantity` * `products`.`product_price` as `Total`
FROM `cart`
INNER JOIN `products` ON `products`.`product_id` = `cart`.`product_id`
WHERE `cart`.`u_id` = 1
UNION -- Union summary row to cart results
SELECT
NULL as `product_id`, -- set NULL for non aggregated field
`cart`.`user_id`,
COUNT(*), -- calculate items count in cart
NULL as `unit_price`, -- set NULL for non aggregated field
'Total' as `product_name`, -- set 'Total' string as product name
SUM(`cart`.`quantity` * `products`.`product_price`) as `CartTotal` -- calculate total cart cost
FROM `cart`
INNER JOIN `products` ON `products`.`product_id` = `cart`.`product_id`
WHERE `cart`.`u_id` = 1;