我有一些包含一些产品的表格。他们每个人都有一个价格。 当用户看到他的篮子时,我想显示他选择的所有产品的总量。
我的问题是:是否可以通过SQL执行此操作或在PHP中请求后执行此操作?
其实我的要求是:
SELECT SUM(PRICE) FROM products WHERE ID IN(65,68,68);
我会考虑两个68.
谢谢你, 弗洛里安
答案 0 :(得分:5)
理想情况下,在这种情况下你不会使用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)
答案 1 :(得分:0)
您可以动态生成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
但我想知道是否真的有意义。大概你已经在页面上显示了单价,所以你不能只用你已经拥有的单价加起来吗?
答案 2 :(得分:0)
我认为一种方法是在篮子中插入所有物品的时间表,然后加入它并获得产品。所以,如果你有三次产品,你将把它插入三次,连接将是三次,所以当你得到总和时,将获得正确的导入。
如果您从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