Mysql: actualizar un dato con una condición

Es un minitip para programadores en apuros, como siempre sirve googlear y que te aparezca un resultado, venga, hice lo mismo y correspondo con contribuir con la sociedad.

Querés actualizar un valor de 0 a 1 o de 1 a 0? una cosa que dependa de otra? por una condición? es fácil:

update usuario set negativizer = 
  case when negativizer = 0 
  then 1
  else  0 
  end 
where id_usuario = 1


Para darles un ejemplo, lo que hace es simplemente cambiar el valor cuando ya tiene uno y al volver a ejecutar esta sentencia lo vuelve a cambiar, ideal para valores binarios como este caso.

Se que hay otras formas pero me gustó esta de resolverlo :P

Categoría: Programación Etiquetas:  
Otros posts que podrían llegar a gustarte...

Comentarios

  • Kromfeld    

    o más fácil, 3 queries.... una para cambiar todos los ceros a un número imposible, tipo nueve, luego cambiar todos los unos a cero, y luego cambiar todos los nueves a uno!

    • Responder
    • Citar
    • Comentado:
  • Fabio    


    Kromfeld dijo:

    o más fácil, 3 queries.... una para cambiar todos los ceros a un número imposible, tipo nueve, luego cambiar todos los unos a cero, y luego cambiar todos los nueves a uno!


    más cochino no podías ser? jajaja alumno kromfield! usted está desaprobado! :D

    • Responder
    • Citar
    • Comentado:
  • Siempre hay una solución estilo BASIC para todo :P

    Se puede hacer perfectamente como lo planteaste, pero, ya que es un valor binario, no es más fácil, rápido y bonito, solo negarlo? negativizer = NOT negativizer ?

    • Responder
    • Citar
    • Comentado:
  • Por cierto, para cuando suscribirse a los comentarios en PostRev??

    • Responder
    • Citar
    • Comentado:

  • Adrian Ramiro dijo:

    Siempre hay una solución estilo BASIC para todo :P

    Se puede hacer perfectamente como lo planteaste, pero, ya que es un valor binario, no es más fácil, rápido y bonito, solo negarlo? negativizer = NOT negativizer ?


    Si ideal para este caso, pero el codigo de fabio sirve para cualquier par de valores.


    Fabio dijo:
    Kromfeld dijo:
    o más fácil, 3 queries.... una para cambiar todos los ceros a un número imposible, tipo nueve, luego cambiar todos los unos a cero, y luego cambiar todos los nueves a uno!


    más cochino no podías ser? jajaja alumno kromfield! usted está desaprobado! :D


    jaja 100% deacuerdo!

    • Responder
    • Citar
    • Comentado:
  • Gonzalo    

    Fabio: Con esta ayuda te ganarias un lindo lugar en http://thedailywtf.com/Default.aspx... Kromfeld iria directamente al podio...

    si fuera numerico podrias hacer algo asi como (no es exacto):

    update usuario set negativizer = ABS(negativizer-1).

    Puede que ABS no sea la funcion exacta, pero la idea es que te devuelva el valor absoluto.

    • Responder
    • Citar
    • Comentado:
  • myNick    

    Usando tu ejemplo, yo siempre uso:

    UPDATE Usuario
    SET negativizer = 1 - negativizer
    WHERE id_usuario = 1

    • Responder
    • Citar
    • Comentado:
  • Fabio    


    myNick dijo:

    Usando tu ejemplo, yo siempre uso:

    UPDATE Usuario
    SET negativizer = 1 - negativizer
    WHERE id_usuario = 1


    que debe ser más óptimo para cambios booleanos

    el CASE te puede servir para más de dos estados, claro.

    • Responder
    • Citar
    • Comentado:
  • Va otra:

    update usuario set negativizer = IF(negativizer, 0, 1) where id_usuario = 1

    • Responder
    • Citar
    • Comentado:
  • Por BASIC me refería a la reseña de Kromfeld, y no me desentiendo de las burradas que yo hice, que han sido peores.

    Si se deja la puerta abierta para más de 2 valores, creo que la solución del CASE es la más acertada

    • Responder
    • Citar
    • Comentado:
  • Marvin    

    PostgreSQL rules!! :D

    • Responder
    • Citar
    • Comentado:
  • Kromfeld    


    Fabio dijo:

    Kromfeld dijo:
    o más fácil, 3 queries.... una para cambiar todos los ceros a un número imposible, tipo nueve, luego cambiar todos los unos a cero, y luego cambiar todos los nueves a uno!


    más cochino no podías ser? jajaja alumno kromfield! usted está desaprobado! :D


    no es cochino, es simple, entendible, fácil de mantener, y funciona en cualquier implementación de sql
    para mí <strong>TU</strong> código es un muy buen ejemplo de código cochino
    alumno fabio, relea sobre buenas prácticas de programación y vuelva el cuatrimestre que viene

    • Responder
    • Citar
    • Comentado:
  • Fabio    


    Kromfeld dijo:

    Fabio dijo:
    Kromfeld dijo:
    o más fácil, 3 queries.... una para cambiar todos los ceros a un número imposible, tipo nueve, luego cambiar todos los unos a cero, y luego cambiar todos los nueves a uno!


    más cochino no podías ser? jajaja alumno kromfield! usted está desaprobado! :D


    no es cochino, es simple, entendible, fácil de mantener, y funciona en cualquier implementación de sql
    para mí <strong>TU</strong> código es un muy buen ejemplo de código cochino
    alumno fabio, relea sobre buenas prácticas de programación y vuelva el cuatrimestre que viene


    estás equivocado, hacer 3 queries es mejor que uno en otros casos, no en este!

    en tu caso ya asumías un "valor imposible" de reemplazo momentáneo cuando no era necesario, simplemente había que evaluar el valor actual para invertirlo o cambiarlo. Fijate el resto de los ejemplos que dejaron, uno más elegante que el otro y todos en un sólo query!

    una consulta a la base tan simple es siempre mejor que tres cochinadas :D eso es una pésima práctica de programación, más en SQL

    • Responder
    • Citar
    • Comentado:
  • John Doe    

    Kromfeld dijo:

    Fabio dijo:
    Kromfeld dijo:
    o más fácil, 3 queries.... una para cambiar todos los ceros a un número imposible, tipo nueve, luego cambiar todos los unos a cero, y luego cambiar todos los nueves a uno!


    más cochino no podías ser? jajaja alumno kromfield! usted está desaprobado! :D


    no es cochino, es simple, entendible, fácil de mantener, y funciona en cualquier implementación de sql
    para mí <strong>TU</strong> código es un muy buen ejemplo de código cochino
    alumno fabio, relea sobre buenas prácticas de programación y vuelva el cuatrimestre que viene
    Si esas 3 queries no están dentro de una transacción entonces es un gran problema. Ya que si desde otra consulta necesitan leer el valor de esa fila justo luego de poner el valor imposible (pero antes de reemplazarlo) entonces el resultado no va a tener ningún sentido. En definitiva, si no son parte de una transacción tu solución es incorrecta.

    • Responder
    • Citar
    • Comentado:
  • mdl1970    

    Fabio Rocks !
    Kromfield sucks...............

    • Responder
    • Citar
    • Comentado:
  • re-loco    

    che, es verdad que en capital federal a MySQL le dicen "mai sicuel" en lugar de "mai ese-cu-ele"?

    • Responder
    • Citar
    • Comentado:
  • Fabio    


    re-loco dijo:

    che, es verdad que en capital federal a MySQL le dicen mai sicuel en lugar de mai ese-cu-ele?


    pregunta pelotuda, pero yo le digo "mai esecuele", sicuel dicen los boludos, al igual que shavvva en vez de jjjjjjjjjava :D

    • Responder
    • Citar
    • Comentado:

Deje su comentario:

Tranquilo, su email nunca será revelado.
La gente de bien tiene URL, no se olvide del http/https
Para evitar bots, si se tardó mucho en leer la nota seguramente no sirva y tenga que intentar dos veces

Negrita Cursiva Imagen Enlace


comentarios ofensivos o que no hagan al enriquecimiento del post serán borrados/editados por el administrador