我有一张桌子,里面有一些产品。他们每个人都有一个价格。当用户看到他的购物篮时,我想显示他选择的所有产品的总金额。
我的问题是:是否可以通过 SQL 来完成,或者我是否可以在 PHP 请求之后完成?
其实我的要求是:
SELECT SUM(PRICE) FROM products WHERE ID IN(65,68,68);
我会考虑这两个 68。
谢谢你,弗洛里安
所以理想情况下你不会IN
在这种情况下使用(事实上,你不能让它以这种方式工作)。您需要的是 JOIN 到 cart_products 表(或类似表):
SELECT SUM(PRICE)
FROM
cart_products
JOIN products ON products.id = cart_products.product_id
WHERE
cart_products.cart_id = ?
然后传入当前会话的cart_id。
请注意,如果您的购物车有 qty 选项,您可以将其用作 SUM 表达式:
SUM(products.PRICE * cart_products.qty)
你可以动态生成你的 SQL,这样你最终会得到类似的东西:
SELECT SUM(PRICE)
FROM
(
SELECT PRICE FROM products WHERE id = 65
UNION ALL
SELECT PRICE FROM products WHERE id = 68
UNION ALL
SELECT PRICE FROM products WHERE id = 68
) x
但我想知道是否真的有道理。想必你已经在页面上显示了单价,所以你不能从你已经拥有的东西上加起来吗?
我想一种方法,就是将你所有的物品放在一个临时表中,然后加入它并获取产品。因此,如果您有 3 次产品,您将插入 3 次,连接将 3 次,因此当您求和时,将获得正确的导入。
这是如果您将每个 Id 作为参数传递PHP
我不确定MySQL
语法,但这应该可以
CREATE TEMPORARY TABLE BasketProducts(Id INT UNSIGNED NOT NULL)
Insert into BasketProducts values (--Insert everyId)
然后加入
Select sum(P.price) from Products P
inner join BasketProducts BP on P.Id = BP.Id