Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

restar 1 en campo numerico

Estas en el tema de restar 1 en campo numerico en el foro de Mysql en Foros del Web. Hola chicos, me surgio una duda... Tengo un sistema de STOCK en PHP y MYSQL Para restar la cantidad de productos que salen de STOCK ...
  #1 (permalink)  
Antiguo 26/10/2011, 15:43
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 1 mes
Puntos: 89
restar 1 en campo numerico

Hola chicos, me surgio una duda...

Tengo un sistema de STOCK en PHP y MYSQL
Para restar la cantidad de productos que salen de STOCK
Primero tengo que hacer un SELECT ver cuantos HAY
Y despues restarlos con un UPDATE....

El promebla es que un proceso anterior valido el stock y dos Hojas despues me toca descontarlo....

en MySQL el STOCK es un campo INT.
¿Hay alguna herramienta para restar automaticamente -X cantidad?

Desde ya gracias chicos.
__________________
Mono programando!
twitter.com/eguimariano
  #2 (permalink)  
Antiguo 26/10/2011, 15:52
Avatar de andrexsos17  
Fecha de Ingreso: enero-2011
Ubicación: Manizales
Mensajes: 169
Antigüedad: 13 años, 2 meses
Puntos: 15
Respuesta: restar 1 en campo numerico

Hola, tal vez lo que me dijeron en este foro te sirva.

Saludos!!
__________________
Todo problema es una forma mental que la mente sostiene. Los problemas dejan de existir cuando los olvidamos. Todo problema ha sido creado por la mente y existe mientras la mente lo sostenga.
  #3 (permalink)  
Antiguo 26/10/2011, 15:55
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 1 mes
Puntos: 89
Respuesta: restar 1 en campo numerico

Cita:
Iniciado por andrexsos17 Ver Mensaje
Hola, tal vez lo que me dijeron en este foro te sirva.

Saludos!!
Gracias andrexsos le diste en el clavo.


Código MySQL:
Ver original
  1. UPDATE tabla SET campo1= campo1-'$variable' WHERE id='$id'
__________________
Mono programando!
twitter.com/eguimariano
  #4 (permalink)  
Antiguo 27/10/2011, 12:24
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 6 meses
Puntos: 91
Respuesta: restar 1 en campo numerico

Si te sirve de ayuda y tomalo solo como consejo :P para que no tengas inconsistencia de la información te recomiendo también hacerlo todo dentro de una transacción y además hacer un bloqueo de tablas, solo para que no se te vaya a arruinar la validez de tus datos :)

Saludos.
  #5 (permalink)  
Antiguo 27/10/2011, 13:02
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 1 mes
Puntos: 89
Respuesta: restar 1 en campo numerico

Cita:
Iniciado por Ribon Ver Mensaje
Si te sirve de ayuda y tomalo solo como consejo :P para que no tengas inconsistencia de la información te recomiendo también hacerlo todo dentro de una transacción y además hacer un bloqueo de tablas, solo para que no se te vaya a arruinar la validez de tus datos :)

Saludos.
Entiendo el concepto de hacerlo todo dentro de una transacción.
Ahora Bloqueo de la tabla me inhabilitaría como punto de ventas múltiples.
__________________
Mono programando!
twitter.com/eguimariano
  #6 (permalink)  
Antiguo 27/10/2011, 13:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: restar 1 en campo numerico

No. El bloqueo ocurre mientras dure la operación que se debe mantener consistente, y lo que haces es gestionar esa situación para enviar las otras inserciones desde los otros puntos de venta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 27/10/2011, 14:21
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 1 mes
Puntos: 89
Respuesta: restar 1 en campo numerico

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No. El bloqueo ocurre mientras dure la operación que se debe mantener consistente, y lo que haces es gestionar esa situación para enviar las otras inserciones desde los otros puntos de venta.
@gnzsoloyo

Estoy tratando de entender lo que me pusiste...
mi consulta es la siguiente:
-Tabla Articulos ( ID, Descripcion, Stock, PrecioVenta )

Yo trabajo con PHP&HTML.
El primer formulario ZendFramework-JQuery el Usuario selecciona el articulo y la cantidad.

El segundo formulario (ya con procesos PHP) valida el Stock-Cantidad, y que al ser HTML-Javascript el primer formulario, valida que ningun dato relevante fuese modificado.
En el segundo se agregan otros datos y por ultimo envia al 3 PHP para procesar todo esto.

Un usuario acostumbrado a trabajar al realiza esto en 1min. MAX
Otro usuario despistado puede que deje en el segundo formulario y abandone sin salir (dejando el explorador en esa hoja).
Y otro usuario puede que demore 5-10min mientras habla con el cliente.

Si yo bloqueara la tabla en alguno de mis 3 proceso y tengo los 3 usuario simultaneos, todos concretaran su operacion sin problema alguno, O es provable que alguno le envie un mysql_error().
__________________
Mono programando!
twitter.com/eguimariano
  #8 (permalink)  
Antiguo 27/10/2011, 14:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: restar 1 en campo numerico

Las tablas no se deben bloquear cuando inicias un proceso en un formulario web. Se deben bloquear luego de realizar las validaciones, y sólo para realizar inserciones, actualizaciones o borrados, todos los cuales se deben realizar en en sólo proceso de un script.
Si es necesario realizar bloqueos más largos por cuestiones de consistencia, lo que haces es analizar el mensaje de error recibido al intentar hacer un I/U/D y devolverle al usuario un mensaje indicando que la operación no se puede completar porque el sistema está en uso. Para eso tienes los diferentes códigos de error de MySQL...
Por otro lado, si los datos a modificar dependen de una lectura, lo que se hace es realizar verificaciones antes de consolidar datos en la base para verificar que los mismos no hayan sido modificados entre la lectura inicial y ese momento. Si usas tablas InnoDB puedes hacer lecturas bloqueantes, y lecturas con diversos ISOLATION LVELs, que te pueden aportar seguridad para la concurrenca.

En cualquier caso, ten en cuenta que bloquear las tablas al inicio de una edición de un formulario es una mala, espantosa, horripilante práctica que ningún programador debe hacer.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 27/10/2011, 14:47
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 1 mes
Puntos: 89
Respuesta: restar 1 en campo numerico

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Las tablas no se deben bloquear cuando inicias un proceso en un formulario web. Se deben bloquear luego de realizar las validaciones, y sólo para realizar inserciones, actualizaciones o borrados, todos los cuales se deben realizar en en sólo proceso de un script.
Si es necesario realizar bloqueos más largos por cuestiones de consistencia, lo que haces es analizar el mensaje de error recibido al intentar hacer un I/U/D y devolverle al usuario un mensaje indicando que la operación no se puede completar porque el sistema está en uso. Para eso tienes los diferentes códigos de error de MySQL...
Por otro lado, si los datos a modificar dependen de una lectura, lo que se hace es realizar verificaciones antes de consolidar datos en la base para verificar que los mismos no hayan sido modificados entre la lectura inicial y ese momento. Si usas tablas InnoDB puedes hacer lecturas bloqueantes, y lecturas con diversos ISOLATION LVELs, que te pueden aportar seguridad para la concurrenca.

En cualquier caso, ten en cuenta que bloquear las tablas al inicio de una edición de un formulario es una mala, espantosa, horripilante práctica que ningún programador debe hacer.
gnzsoloyo

Entonces entendi bien el concepto de bloquear. Tambien al esperar tu respuesta google un poquito. Y conociendo la Utilidad de este proceso de venta, los usuarios y sus metodologias de trabajo, no me parece apropiado Bloquear las tablas, no dudo su funcionalidad. Solo que un mensaje indicando que la operación no se puede completar porque el sistema está en uso, no es de mi agrado en este momento. Ademas este proceso solo descontara la cantidad, es mas probable que esten vendiendo en dos terminales, a que uno venda y el otro este I/U/D en la tabla Articulos, e incluso modificando el articulo que se esta vendiendo.

Pero no es algo a ignorar seguro sera una gran herramienta a en algun otro rincon de este trabajo... gracias gnzsoloyo por la info.


EDITO: Siempre hablando de segundos... ya que si bloqueo la tabla, es el ultimo archivo.php que lo unico que hace es procesar todo Y no desde el inicio.
__________________
Mono programando!
twitter.com/eguimariano
  #10 (permalink)  
Antiguo 27/10/2011, 20:22
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 6 meses
Puntos: 91
Respuesta: restar 1 en campo numerico

podrías nutrirte u poquito también en la documentación oficial :)

http://dev.mysql.com/doc/refman/5.0/es/lock-tables.html

Etiquetas: numerico, php, restar, select, sql, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:53.