条件は、MySQLで満たされている場合に選択し、同時にUPDATEを行います

nTuply:

私は、チェックアウトシステムを構築しようとしています。私は3つのテーブル、完了した注文を保持しているユーザーのカートと1を保持している製品と1を保持しているものを持っています。

プロダクト

product_id  |  product_name  | stock  |  unit_price
1           |  item1         | 10     |  40
2           |  item2         | 5      |  30
3           |  item3         | 4      |  29

カート

user_id  |  product_id  |  quantity
1        |  1           |  4
1        |  2           |  6

完了した注文

user_id  |  product_id  |  quantity
1        |  3           |  2

私はをやろうとしていることは製品にSELECTを行うと証券は、ユーザーのカートから数量以上であるかどうかを確認します。これが本当であるならば、それはMYSQLクエリで直接株式数を減少させます。

今、私がいる問題は、これが可能である場合、私は知らない、です。私はPHPでそれを行うことができますが、それは私はそれがあまりにも最適化されていない場合には避けたいかなりの数回の反復を、かかります。

私の周りを検索し、私はここで部分的な解決策を見つけた:MySQLは-そして、UPDATEを選択します

しかし、私はそれにIFを含める方法を知りません。

ニック:

これは使用して、1つのクエリでMySQL8で行うことができCTE、カート内のすべての在庫が満足してから更新をすることが可能かどうかを計算するproductsことができる場合のみ:

WITH cart_balance_ok AS (
  SELECT c.user_id, 
         MIN(p.stock >= c.quantity) AS cart_ok
  FROM cart c 
  JOIN products p ON p.product_id = c.product_id
  GROUP BY c.user_id
)
UPDATE products p
JOIN cart c ON c.product_id = p.product_id
JOIN cart_balance_ok cb ON cb.user_id = c.user_id AND cb.cart_ok = 1
SET p.stock = p.stock - c.quantity

デモためではない十分な在庫は変化を示さないここにデモへの変更を示すproducts十分な在庫がある場合、ここを

その後、使用することができるはずmysqli_affected_rows更新が行われたかどうかを判断します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=373263&siteId=1