2

我有一张桌子,里面有一些产品。他们每个人都有一个价格。当用户看到他的购物篮时,我想显示他选择的所有产品的总金额。

我的问题是:是否可以通过 SQL 来完成,或者我是否可以在 PHP 请求之后完成?

其实我的要求是:

SELECT SUM(PRICE) FROM products WHERE ID IN(65,68,68);

我会考虑这两个 68。

谢谢你,弗洛里安

4

3 回答 3

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)
于 2012-08-29T16:49:50.737 回答
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

但我想知道是否真的有道理。想必你已经在页面上显示了单价,所以你不能从你已经拥有的东西上加起来吗?

于 2012-08-29T16:51:45.160 回答
0

我想一种方法,就是将你所有的物品放在一个临时表中,然后加入它并获取产品。因此,如果您有 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
于 2012-08-29T16:53:20.057 回答