Haciendo un SELECT y UPDATE simultáneamente si se cumple una condición en MySQL

nTuply:

Estoy tratando de construir un sistema de pago. Tengo 3 tablas, una que contiene los productos y uno que mantiene la compra del usuario y uno que contiene las órdenes completas.

productos

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

carro

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

pedidos completados

user_id  |  product_id  |  quantity
1        |  3           |  2

Lo que estoy tratando de hacer es hacer un SELECT en los productos y comprobar si el archivo es mayor que la cantidad de la compra del usuario. Si esto es cierto, entonces se disminuye la Bolsa de recuento directamente en la consulta de MySQL.

Ahora el problema que estoy teniendo es, no sé si esto es posible. Puedo hacerlo en PHP pero llevará unas pocas iteraciones del todo, lo que quiero evitar en caso de que no sea muy optimizado.

Busqué y encontré una solución parcial aquí: MySQL - SELECCIONAR A continuación, actualice

Sin embargo, no sé cómo incluir el SI en el mismo.

Nick:

Esto se puede hacer en mysql8 en una consulta, utilizando una CTEpara calcular si todos los valores de un carro puede ser satisfecha y después actualizar productssólo si se puede:

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

Mostrando demostración ningún cambio porque no hay suficiente de aquí . Mostrando demostración cambios en productsdonde hay stock suficiente aquí .

A continuación, debería ser capaz de utilizar mysqli_affected_rowspara determinar si la actualización se llevó a cabo.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=373270&siteId=1
Recomendado
Clasificación