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

a ver quien me ayudaen esta cruzada

Estas en el tema de a ver quien me ayudaen esta cruzada en el foro de Mysql en Foros del Web. tengo una tabla en la que los campos tienen valores y los que no tiene valores tiene cero(0), yo lo que necesito es seleccionar todos ...
  #1 (permalink)  
Antiguo 05/07/2018, 10:09
 
Fecha de Ingreso: noviembre-2003
Mensajes: 490
Antigüedad: 16 años
Puntos: 7
a ver quien me ayudaen esta cruzada

tengo una tabla en la que los campos tienen valores y los que no tiene valores tiene cero(0), yo lo que necesito es seleccionar todos los registros ,que, en cuyos campos no haya cero, lo trabajo con esto pero me trae un registro vacio, lo cual no es verdad ya que en el registro hay valores distintos de cero
Código SQL:
Ver original
  1. SELECT * FROM `tarifas`
  2. WHERE
  3. `nr`=3194
  4. AND(`single`<>0 OR `single`>0)
  5. AND(`doble`<>0 OR `doble`>0)
  6. AND(`triple`<>0 OR `triple`>0)
  7. AND( `cuadr`<>0 OR `cuadr`>0)
  8. AND( `dpto2p`<>0 OR `dpto2p`>0)
  9. AND( `dpto3p`<>0 OR `dpto3p`>0)
  10. AND( `dpto4p`<>0 OR `dpto4p`>0)
  11. AND( `dpto5p`<>0 OR `dpto5p`>0)
  12. AND( `dpto6p`<>0 OR `dpto6p`>0)
  13. AND( `dpto7p`<>0 OR `dpto7p`>0)
  14. AND( `dpto8p`<>0 OR `dpto8p`>0)
  15. AND( `suite`<>0 OR `suite`>0)
  16. AND( `pecomp`<>0 OR `pecomp`>0)
  17. AND( `mediap`<>0 OR `mediap`>0)
  18. AND( `desayuno`<>0 OR `desayuno`>0)
  19. AND( `almcena`<>0 OR `almcena`>0)
  20. AND( `bcomun1`<>0 OR `bcomun1`>0)
  21. AND( `bcomun2`<>0 OR `bcomun2`>0)
  22. AND( `bcomun3`<>0 OR `bcomun3`>0)
  23. AND( `bcomun4`<>0 OR `bcomun4`>0)

Última edición por gnzsoloyo; 05/07/2018 a las 13:13
  #2 (permalink)  
Antiguo 05/07/2018, 10:17
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 3 meses
Puntos: 774
Respuesta: a ver quien me ayudaen esta cruzada

un ejemplo de tus datos y el resultado esperado ayudaria
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 05/07/2018, 10:58
 
Fecha de Ingreso: noviembre-2003
Mensajes: 490
Antigüedad: 16 años
Puntos: 7
Respuesta: a ver quien me ayudaen esta cruzada

nr=3194
single=235
iva=si
doble=0
triple=0
cuadr=458
dpto2p=0
dpto3p=555

y el resultado esperado seria que me muestre
nr =3194
single=235
iva=si
cuadr=458
dpto3p=555
  #4 (permalink)  
Antiguo 05/07/2018, 11:48
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 3 meses
Puntos: 774
Respuesta: a ver quien me ayudaen esta cruzada

Eso que quieres hacer no se puede lograr con un query sencillo, porque estas escogiendo tooodas las columnas, la condicion del where aplica por renglon no por columna, se podria hacer lo que necesitas pero tendrias que hacer un query dinamico, pero esto solo seria por renglon, si ocuparas mas de un renglon con diferentes columnas cada uno, entonces tendrias que hacer mas de un select
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 05/07/2018, 13:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: a ver quien me ayudaen esta cruzada

@Parliament: Este hilo es una continuacion de este otro: http://www.forosdelweb.com/f86/error...o-mal-1161750/
La única diferencia es el tipo de datos.

Si quieres continuarlo o reiniciarlo, los combinaré, pero por favor, POSTEA DATOS de un caso real, porque ya te dijimos que el problema no está en la query, sino en la validación de los datos por parte del WHERE, y sin ver datos completos no es posible hacerte una sugerencia que te sirva.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 05/07/2018, 20:48
 
Fecha de Ingreso: noviembre-2003
Mensajes: 490
Antigüedad: 16 años
Puntos: 7
Exclamación Respuesta: a ver quien me ayudaen esta cruzada

me sugieres que te ponga todos los datos de la tabla??, creo que seria una locura, entiendo que el problema esta muy bien reproducido y los ejemplos estan muy bien dados, solo faltaria que alguien diga como deberia ser el select que tendria que construir, no entiendo que mas se necesita.
De cualquier manera yo dejo el proyecto hasta los primeros dias de Agosto, por alla nos encontramos.

Última edición por Parliament; 05/07/2018 a las 20:57 Razón: falta deci algo
  #7 (permalink)  
Antiguo 06/07/2018, 07:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: a ver quien me ayudaen esta cruzada

Ok... Revisando los dos posts de este hilo, me parece que lo que te está sucediendo es que no tienes una completa comprensión de cómo funciona el SQL, y lo que hace el WHERE en especial...

Lo que quieres resolver es esto:
Cita:
tengo una tabla en la que los campos tienen valores y los que no tiene valores tiene cero(0), yo lo que necesito es seleccionar todos los registros ,que, en cuyos campos no haya cero
Ahora bien, el ejemplo de datos que nos das es este:
Cita:
nr=3194
single=235
iva=si
doble=0
triple=0
cuadr=458
dpto2p=0
dpto3p=555
Y quieres que en base a eso, puedas obtener esto:
Cita:
nr =3194
single=235
iva=si
cuadr=458
dpto3p=555
Bueno, eso que dices querer como resultado en una query que apunta una única tabla con múltiples campos, es absolutamente imposible a nivel SQL y sólo lo puedes hacer programáticamente, por las siguientes razones:
1) Un SELECT devuelve siempre la cantidad de campos que indica a continuación, sean estos TODOS los de la(s) tabla(s) del FROM, o solo los que se indiquen, como se indiquen. NO PUEDE devolver una cantidad menor a la definida, ni descarta dinámicamente ninguno de ellos.
2) El WHERE evalúa cada uno de los registros como una unidad lógica. Esto significa que deben cumplirse TODAS las condiciones para que el registro sea devuelto en la consulta. Como es una sola unidad lógica, si al menos UNO de los campos no cumple la condición, se descarta el registro entero.

Interpretando los datos de tu ejemplo en base a esto, el problema es que ese registro con NR = 3194 tiene los campos "doble" y "triple" en cero y por consecuencia NUNCA devolverá ese registro.

¿Se entiende el problema?

Ahora, esto tendría una solución, pero no es una solución por una query simple, y hay dos formas de resolverlo.
Una, las habitaciones que aparecen en esa tabla deberían estar en otra tabla, la cual tendría un registro por cada una de ellas. Esa tabla requiere ademas otra tabla adicional de tipos de habitaciones... es otro diseño.
Otra forma es hacer una query multiple con UNION ALL, donde cada SELECT consulte por UNA de las habitaciones. El problema es que una consulta así es de difícil mantenimiento y lectura. No es muy aconsejable.

TODO el resto de la solución es programática, no de SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, registro
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 02:58.