0

鉴于这些数据,我想求和 (tbl_basket subt),乘以折扣,加上运费。

# tbl_basket  order_id  qty    price     subt
                     1    1    10.00    10.00
                     1    4     5.00    20.00
                     1    3    12.00    36.00

# tbl_coupon        id          name discount
                     1     "10% off"    10.00

# tbl_shipping      id                   cost
                     1                   4.99

# tbl_order  coupon_id   shipping_id    total  
                     1             1        ?  # I want to update total

我想查询篮子:

SELECT * FROM tbl_basket WHERE order_id = $order_id

总结项目,我是这样想的?

SELECT SUM(subt) FROM tbl_basket WHERE order_id = $order_id

查询折扣

SELECT discount FROM tbl_coupon AS coupon
          INNER JOIN tbl_order AS order
               WHERE coupon.id = order.coupon_id

问)如何将此查询合并到 MySQL 中的另一个查询中?

Q) 折扣后的值如何设置(新的总计=总计*(100-折扣)/100)

我觉得通过直接汇总数据库中的总数会使系统更加健壮,这就是我想这样做的原因。

问)有没有更好的方法来做到这一点?

谢谢你的帮助。

4

2 回答 2

2

我同意 evan - 在 PHP 中进行计算要好得多。如果没有别的,你可以更好地看到你在做什么!

但是如果你真的想看看它在 SQL 中的样子,你可以尝试这样的事情:

SELECT ((select total price query)*(select discount query) + (select shipping query))

当然,使用子查询,您可能会将所有内容都放入单个查询语句中。但是,添加的越多,调试就越困难。在 PHP 中,组装这些部件要容易得多。

祝你好运。

于 2012-04-15T14:09:45.997 回答
1

我也倾向于同意其他人的观点,他们说您应该坚持在 PHP 中执行此操作,尽管开销差别不大。只要所有必要的索引都到位,您就可以使用以下查询以最小的开销计算最终总数。

SELECT (SUM(b.subt) * ((100 - MIN(c.discount)) / 100)) + MIN(s.cost) AS final_total
FROM tbl_order o
INNER JOIN tbl_basket b
    ON o.id = b.order_id
INNER JOIN tbl_shipping s
    ON s.id = o.shipping_id
INNER JOIN tbl_coupon c
    ON c.id = o.coupon_id
WHERE o.id = 1
GROUP BY o.id;
于 2012-04-15T14:27:08.570 回答