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

Si te gustó esta nota podés...
Invitame un café en cafecito.app

Categoría: Programación Etiquetas:  

Otros posts que podrían llegar a gustarte...

Comentarios

  • Kromfeld     05/11/2009 - 14:49:30

    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!

  • Fabio     05/11/2009 - 15:05:58


    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

  • Adrian Ramiro     05/11/2009 - 15:19:13

    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 ?

  • Adrian Ramiro     05/11/2009 - 15:20:27

    Por cierto, para cuando suscribirse a los comentarios en PostRev??

  • Sebastian Buchniv     05/11/2009 - 16:16:24


    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!

  • Gonzalo     05/11/2009 - 16:20:48

    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.

  • myNick     05/11/2009 - 16:28:09

    Usando tu ejemplo, yo siempre uso:

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

  • Fabio     05/11/2009 - 16:38:27


    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.

  • Norman normal     05/11/2009 - 17:16:21

    Va otra:

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

  • Adrian Ramiro     05/11/2009 - 17:35:32

    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

  • Marvin     05/11/2009 - 19:58:51

    PostgreSQL rules!! :D

  • Kromfeld     05/11/2009 - 22:34:23


    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

  • Fabio     06/11/2009 - 13:05:07


    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

  • John Doe     08/11/2009 - 04:15:14

    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.

  • mdl1970     09/11/2009 - 10:46:58

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

  • re-loco     11/11/2009 - 02:30:55

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

  • Fabio     11/11/2009 - 03:08:20


    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

Deje su comentario:

Tranquilo, su email nunca será revelado.
La gente de bien tiene URL, no se olvide del http/https

Negrita Cursiva Imagen Enlace


Comentarios ofensivos o que no hagan al enriquecimiento del post serán borrados/editados por el administrador. Los comentarios son filtrados por ReCaptcha V3.