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

problemas consulta con or y and

Estas en el tema de problemas consulta con or y and en el foro de Bases de Datos General en Foros del Web. la consulta en question es esta: las tallas lo pilla bien ahora cuando llega al and, se ralla y no funciona, es decir me saca ...
  #1 (permalink)  
Antiguo 06/09/2009, 06:16
 
Fecha de Ingreso: septiembre-2009
Mensajes: 13
Antigüedad: 14 años, 7 meses
Puntos: 0
problemas consulta con or y and

la consulta en question es esta:

las tallas lo pilla bien ahora cuando llega al and, se ralla y no funciona, es decir me saca todos esten en temporada, rebajados, en liquidacion

Código PHP:
$sql="SELECT *  FROM productos WHERE (0<talla_s<3) OR (0<talla_m<4) OR (0<talla_l<4) OR (0<talla_xl<3) AND catalogo='temporada' AND catalogo='rebajado'  ORDER BY marca, nombre"
por cierto como podria sacar en una variable por ejemplo los que cumplan la condicion de 0<talla_m<4? tendria que hacer una nueva consulta?¿ gracias y un saludo
  #2 (permalink)  
Antiguo 06/09/2009, 09:53
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, 5 meses
Puntos: 2658
Respuesta: problemas consulta con or y and

Código sql:
Ver original
  1. SELECT *
  2. FROM productos
  3. WHERE
  4.  ((talla_s> 0 OR talla_s<3) OR
  5.  (talla_m> 0 OR talla_m<4) OR
  6.  (talla_l > 0 OR talla_l<4) OR
  7.  (talla_xl>0 OR talla_xl<3))
  8.  AND catalogo='temporada'
  9.  AND catalogo='rebajado'
  10. ORDER BY marca, nombre;
El tema pasa porque el funcionamiento de una cadena de condiciones como esa hace que el AND funcione como operador contra la condición anterior, pero no contra todas las condiciones precedentes.
En casos con condiciones encadenadas así, debes analizar bien cuáles se deben considerar como una unidad lógica y cuáles no.
La proposicion que escribí hace que el valor del rango de talles se considere como unidad lógica, y sólo devolverá registros si una de las comparaciones es TRUE y las dependiendes de los AND también.
¿Se comrepende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/09/2009, 11:03
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Respuesta: problemas consulta con or y and

gnzsoloyo,
De ninguna manera la expresión (0<talla_s<3) es equivalente a (talla_s> 0 OR talla_s<3)

Sin embargo tu premisa es correcta.

  #4 (permalink)  
Antiguo 06/09/2009, 15:35
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, 5 meses
Puntos: 2658
Respuesta: problemas consulta con or y and

Cita:
Iniciado por Beakdan Ver Mensaje
gnzsoloyo,
De ninguna manera la expresión (0<talla_s<3) es equivalente a (talla_s> 0 OR talla_s<3)

Sin embargo tu premisa es correcta.
Como podrás imaginarte, no se trata de un error intencional, sino simplemente un error al intentar reescribir apresuradamente lo que el forista quiere...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 08/09/2009, 05:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: problemas consulta con or y and

Igual que los operadores matematicos, los operadores logicos, tiene un orden de prioridad que modifica muy mucho el resultado si no se tiene en cuenta. Cuando se quiere romper dicha prioridad se usan parentesis....

Es decir

2+3x5=17

mientras que

(2+3)x5=25

sin parentesis es igual a 17 siempre, aún que sorprenda a algunos, y con parentesis dependera de donde los opongas...

En logica tenemos que

A or B and C -> es cierta si se cumple A o se cumplen B y C, mientras que

(A or B) and C -> es cierta si se cumple C y se cumplen A o B


Prioridad:::::Operador
1:::::::::::::::(exp), not
2:::::::::::::::*, /, div, mod, and
3:::::::::::::::+, -, or
4:::::::::::::::<, <=, =, < >, >=



Por cierto si 0<talla_s<3 seria (talla_s>0 and talla_s<3)


Quim

Última edición por quimfv; 08/09/2009 a las 05:22
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 06:31.