Mientras estoy codificando un sitio de compras, necesito actualizar el stock de productos. Pero la cosa es que, naturalmente, el carrito de la compra puede tener los mismos artículos un par de veces. ¿Cuál es la mejor manera de actualizarlo?actualizando los valores sql con matriz que tienen un par de veces los elementos ocurridos
Intenté IN
pero la siguiente consulta SQL devuelve 3 elementos.
SELECT *
FROM `products`
WHERE id
IN (3, 4, 4, 6)
LIMIT 0 , 30
Aquí está mi solución, pero, no creo que esta es la mejor.
$cart = array(1,3,4,4,5,8,22,22);
$itemlist = array_count_values($cart);
foreach($itemlist as $itemid=>$ocurrence){
$SQL = "UPDATE products SET stock = stock-".$ocurrence." WHERE id = ".$itemid;
mysql_query($SQL);
}
Creo que este método está bien. De alguna manera tiene que hacer actualizaciones en un bucle si están obteniendo valores diferentes. –
De acuerdo con @MichaelBerkowski. A menos que tenga un problema de rendimiento demostrable (por ejemplo, un gran volumen de usuarios o una gran cantidad de productos/carritos), me quedaré con el método que tiene. Es posible ejecutar la actualización en una sola consulta con una codificación un poco más inteligente, pero será una solución compleja que será más difícil de mantener a largo plazo. – mellamokb
Probablemente ya lo haya escuchado antes, pero considere cambiarse a una API más nueva que admita las declaraciones preparadas, como MysQLi o PDO. Eso realmente mejoraría un poco el rendimiento del ciclo, y también aumentaría la seguridad en otras consultas. –