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

Duda en update mysql

Estas en el tema de Duda en update mysql en el foro de Mysql en Foros del Web. Hola, tengo una duda con un update, supongamos que tengo estas 2 tablas: |----------------| |---------------| |Tarjetas----------| |Pedidos---------| |----------------| |---------------| |numero----------| |tipoTarjeta-------| |tipo-------------| |tarjeta----------| |habilitada --------| ...
  #1 (permalink)  
Antiguo 29/04/2011, 10:48
Avatar de xtimed  
Fecha de Ingreso: julio-2009
Ubicación: BCN - México
Mensajes: 226
Antigüedad: 14 años, 9 meses
Puntos: 41
Pregunta Duda en update mysql

Hola, tengo una duda con un update, supongamos que tengo estas 2 tablas:

|----------------| |---------------|
|Tarjetas----------| |Pedidos---------|
|----------------| |---------------|
|numero----------| |tipoTarjeta-------|
|tipo-------------| |tarjeta----------|
|habilitada --------| |---------------|
|----------------|

Y la consulta que tengo es la siguiente:
Código:
UPDATE tarjetas SET habilitada = false WHERE tarjeta =
4545 AND '4545' NOT IN (SELECT DISTINCT(tarjeta) FROM pedidos)
AND 'VISA' NOT IN (SELECT DISTINCT(tipoTarjeta) FROM pedidos WHERE tarjeta = 4545)
Pero no me funciona, si quito lo ultimo AND 'VISA' NOT IN (SELECT DISTINCT(tipoTarjeta) FROM pedidos WHERE tarjeta = 4545) me funciona bien, pero ocupo que valide las dos cosas, que no este el numero de tarjeta en pedidos pero que no sea del tipo de la tarjeta, por que puede haber 2 tarjetas de tipo diferente pero con el mismo numero, espero me aya podido dar a entender
  #2 (permalink)  
Antiguo 29/04/2011, 16:21
Avatar de xtimed  
Fecha de Ingreso: julio-2009
Ubicación: BCN - México
Mensajes: 226
Antigüedad: 14 años, 9 meses
Puntos: 41
Respuesta: Duda en update mysql

Alguien? o no explique bien la duda?
  #3 (permalink)  
Antiguo 29/04/2011, 16:38
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: Duda en update mysql

No, lo que no queda claro es exactamente qué es lo que hay que actualizar y cuáles son las condiciones que tienen que cumplir los registros que si se deben actualizar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 29/04/2011, 16:47
Avatar de xtimed  
Fecha de Ingreso: julio-2009
Ubicación: BCN - México
Mensajes: 226
Antigüedad: 14 años, 9 meses
Puntos: 41
Respuesta: Duda en update mysql

Ok, lo que hay que actualizar es un campo, supongamos que en la tabla tarjetas tengo estos datos:

4545
AMEX
1

4545
VISA
1

4687
MASTERCARD
1

Y en la tabla pedidos tengo estos datos:

AMEX
4545

MASTERCARD
4687

Entonces lo que quiero aser es actualizar de la tabla tarjetas, la que tenga el numero 4545 y que sea tipo VISA, actualizar habilitada y ponerla en 0, para eso debo checar que no se este utilizando en la tabla pedidos, si no esta siendo utilizada, se deshabilita y si si se esta utilizando, no se deshabilita, en este caso si se debe deshabilitar por que no esta siendo usada en pedidos
  #5 (permalink)  
Antiguo 30/04/2011, 08:23
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: 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
  #6 (permalink)  
Antiguo 30/04/2011, 12:24
Avatar de xtimed  
Fecha de Ingreso: julio-2009
Ubicación: BCN - México
Mensajes: 226
Antigüedad: 14 años, 9 meses
Puntos: 41
Respuesta: Duda en update mysql

Excelente gnzsoloyo, muchisimas gracias, me sacaste de un apuro, aun no tengo mucho conocimiento en MySQL pero la lucha le asemos

Etiquetas: dudas, update
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 18:50.