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

Q) このクエリを MySQL の別のクエリにマージするにはどうすればよいですか?

Q) 割引後の値をどのように設定しますか (新しい合計 = 合計 * (100-割引)/100)

データベースの合計を直接合計することで、システムがより堅牢になると感じたので、このようにしたかったのです。

Q) これを行うためのより良い方法はありますか?

ご協力いただきありがとうございます。

4

2 に答える 2

2

私はevanに同意します-PHPで計算を行う方がはるかに優れています。他に何もなければ、あなたはあなたがしていることをよりよく見ることができます!

ただし、SQLでどのように表示されるかを本当に確認したい場合は、次のように試すことができます。

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

もちろん、サブクエリを使用すると、すべてを1つのクエリステートメントにまとめることができます。ただし、追加すればするほど、デバッグが難しくなります。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 に答える