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.
Esto se puede hacer en mysql8 en una consulta, utilizando una CTE
para calcular si todos los valores de un carro puede ser satisfecha y después actualizar products
só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 products
donde hay stock suficiente aquí .
A continuación, debería ser capaz de utilizar mysqli_affected_rows
para determinar si la actualización se llevó a cabo.