2012-09-04 13 views
6

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); 
} 
+3

Creo que este método está bien. De alguna manera tiene que hacer actualizaciones en un bucle si están obteniendo valores diferentes. –

+0

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

+4

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. –

Respuesta

0

si es posible crear un item_cart independiente, mesa que tendrá (cart_id, item_id, product_id) como Clave primaria. desde aquí puedes hacer un grupo en product_id para ver cuántos no vendidos.

select product_id, count(product_id) as "No of Product Sold" from item_cart 
group by product_id 

su código php actualizará no hay productos en stock coloumn perfectamente.

Si es posible, intente configurar activadores para actualizar las columnas de existencias cada vez que se venda un producto.

Cuestiones relacionadas