Ver Mensaje Individual
  #5 (permalink)  
Antiguo 30/04/2011, 08:23
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Duda en update mysql

Bien, en realidad lo que sucede es que estás intentando hacer en una consulta lo que se recomienda hacer en dos, o bien en un procedimiento almacenado, simplemente por cuestiones prácticas.
A como yo lo veo, hay al menos un par de formas de hacerlo, pero ninguna es demasiado práctica porque te arriesgas a ejecutar una consulta algo ineficiente (como digo, lo que planteas hacer no es práctico).
En principio, lo que quieres hacer es habilitar o deshabilitar una tarjeta dada, dependiendo de si está siendo usada o no en algún pedido almacenado.
Lo más simple sería saber si hay al menos un registro en pedidos con esa tarjeta. Es la única consulta que te devolverá algo si no existen registros, porque contar puede devolver cero, mientras que buscar una tarjeta que no exista te devolverá una tabla vacía.
Una idea sería:
Código MySQL:
Ver original
  1. UPDATE tarjetas
  2. SET habilitada = IF((SELECT COUNT(*) FROM pedidos WHERE tarjeta = 4545 AND tipoTarjeta = 'VISA') > 0, 1, 0)
  3. WHERE tarjeta = 4545 AND tipoTarjeta = 'VISA';
Lo que seguro no se necesita comprobar es si existe otra con el mismo numero pero con diferente nombres, sólo es relevante contar si hay al menos un pedido con esa tarjeta y que tenga ese numero. Mientras la condición sea estricta, es suficiente.
Te digo esto último para explicar que tienes que tratar de plantear las condiciones de una forma más simple y precisa. Si los dos valores deben darse al mismo tiempo en la misma tabla, no tiene sentido poner una subconsulta para verificar cada uno por separado...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 30/04/2011 a las 08:35