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

Consulta anidada

Estas en el tema de Consulta anidada en el foro de Mysql en Foros del Web. Hola tengo un problema con una consulta que no se si es que la estoy implementando mal o que sera, la consulta es esta: SELECT ...
  #1 (permalink)  
Antiguo 16/07/2012, 12:55
Avatar de ..::MaRcOs::..  
Fecha de Ingreso: diciembre-2006
Mensajes: 328
Antigüedad: 17 años, 4 meses
Puntos: 3
Consulta anidada

Hola tengo un problema con una consulta que no se si es que la estoy implementando mal o que sera, la consulta es esta:

SELECT * FROM `directorio` WHERE `titulo` LIKE '%hotel%' OR `descripcion` LIKE '%hotel%' OR `tags` LIKE '%hotel%' AND `activo`=1

la consulta falla debido a que las empresas que tienen activo 0 es por que estan suspendidas y me estan apareciendo en las busquedas.

necesito que realice una busqueda de tipo like %% pero que solo aparezcan las que el valor activo sea igual a 1. lo he intentado de muchas formas y no he obtenido el resultado esperado, les agradezco me echen una manito.
  #2 (permalink)  
Antiguo 16/07/2012, 13:28
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: Consulta anidada

Es un problema de lógica proposicional.
Debes separar las condiciones con paréntesis para que sean evaluadas correctamente:
Código MySQL:
Ver original
  1. FROM `directorio`
  2.     (`titulo` LIKE '%hotel%'
  3.     OR `descripcion` LIKE '%hotel%'
  4.     OR `tags` LIKE '%hotel%')
  5.     AND `activo`=1;

No te olvdes que en el OR, basta conque uno de ellos sea verdadero para que toda la proposición sea verdadera, sin importar el resto.
El AND actúa como condicional sólo con el último parametro del OR, pero no con los anteriores.
Lo que pusiste sería igual a:
Código MySQL:
Ver original
  1. FROM `directorio`
  2.     `titulo` LIKE '%hotel%'
  3.     OR `descripcion` LIKE '%hotel%'
  4.     OR (`tags` LIKE '%hotel%' AND `activo`=1);
Es decir que sólo se consideran al mismo tiempo los tags y si está activo, pero devolverá todas las concidencias en titulo y descripción.
¿Se comprende?
__________________
¿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: select, tipo
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 19:11.