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

Problema en consulta con varios LIKE

Estas en el tema de Problema en consulta con varios LIKE en el foro de Mysql en Foros del Web. Buenos dias tengo la siguiente consulta: Poniendo asi esta consulta no me respeta las condiciones: colegiaturas_detalle.cancelado = '0' AND colegiaturas_detalle.pagado = '1' AND colegiaturas.pago <> ...
  #1 (permalink)  
Antiguo 05/11/2012, 10:18
 
Fecha de Ingreso: mayo-2009
Mensajes: 242
Antigüedad: 14 años, 11 meses
Puntos: 2
Pregunta Problema en consulta con varios LIKE

Buenos dias tengo la siguiente consulta:

Poniendo asi esta consulta no me respeta las condiciones: colegiaturas_detalle.cancelado = '0' AND colegiaturas_detalle.pagado = '1' AND colegiaturas.pago <> ''

Código MySQL:
Ver original
  1. SELECT SQL_CALC_FOUND_ROWS colegiaturas_detalle.*,colegiaturas.*,niveles.nombre as nomN,alumnos.nombre as nomA FROM colegiaturas INNER JOIN niveles ON colegiaturas.idNivel = niveles.idNivel INNER JOIN alumnos ON colegiaturas.idAlumno = alumnos.idAlumno INNER JOIN colegiaturas_detalle ON colegiaturas.idColegiatura = colegiaturas_detalle.idColegiatura WHERE colegiaturas_detalle.cancelado = '0' AND colegiaturas_detalle.pagado = '1' AND colegiaturas.pago <> '' AND colegiaturas_detalle.folio LIKE '%di%' OR alumnos.nombre LIKE '%di%' LIMIT 0, 10


Pero si pongo la consulta de la siguiente manera con un solo LIKE si e respeta las demas condiciones que se encuentran dentro del WHERE

Código MySQL:
Ver original
  1. SELECT SQL_CALC_FOUND_ROWS colegiaturas_detalle.*,colegiaturas.*,niveles.nombre as nomN,alumnos.nombre as nomA FROM colegiaturas INNER JOIN niveles ON colegiaturas.idNivel = niveles.idNivel INNER JOIN alumnos ON colegiaturas.idAlumno = alumnos.idAlumno INNER JOIN colegiaturas_detalle ON colegiaturas.idColegiatura = colegiaturas_detalle.idColegiatura WHERE colegiaturas_detalle.cancelado = '0' AND colegiaturas_detalle.pagado = '1' AND colegiaturas.pago <> '' AND colegiaturas_detalle.folio LIKE '%di%' LIMIT 0, 10


Espero me puedan ayudar porque no encuentro cual es el problema. Saludos y de antemano gracias.
  #2 (permalink)  
Antiguo 05/11/2012, 10:27
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: Problema en consulta con varios LIKE

Pon paréntesis agrupando las condiciones en el orden que quieres que se comprueben.
  #3 (permalink)  
Antiguo 05/11/2012, 10:33
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: Problema en consulta con varios LIKE

Observa bien tu consulta:
Código MySQL:
Ver original
  1.     SQL_CALC_FOUND_ROWS colegiaturas_detalle.*,
  2.     colegiaturas.*,
  3.     niveles.nombre as nomN,
  4.     alumnos.nombre as nomA
  5. FROM colegiaturas
  6.     INNER JOIN niveles ON colegiaturas.idNivel = niveles.idNivel
  7.     INNER JOIN alumnos ON colegiaturas.idAlumno = alumnos.idAlumno
  8.     INNER JOIN colegiaturas_detalle ON colegiaturas.idColegiatura = colegiaturas_detalle.idColegiatura
  9.     colegiaturas_detalle.cancelado = '0'
  10.     AND colegiaturas_detalle.pagado = '1'
  11.     AND colegiaturas.pago <> ''
  12.     AND colegiaturas_detalle.folio LIKE '%di%'
  13.     OR alumnos.nombre LIKE '%di%'
Lo que estás planteando es que cumpla las primeras cuatro condiciones si o sí, o bien que cumpla la última.
OR es una disyunción lógica, por lo que es verdadero aquello que cumpla con lo que está a la izquierda del OR y/o lo que está a la derecha. Pero con lo de la derecha alcanza, e ignora todo lo demás...
Lo que te está faltando es manejar correctamente la lógica proposicional.
Para hacer que se cumpla todo, debes definir cual es el par correspondiente al OR.
Su poniendo que sea la última condición, podría ser:
Código MySQL:
Ver original
  1.     C.*,
  2.     N.nombre as nomN,
  3.     A.nombre as nomA
  4. FROM colegiaturas C
  5.     INNER JOIN niveles N ON cC.idNivel = N.idNivel
  6.     INNER JOIN alumnos A ON C.idAlumno = A.idAlumno
  7.     INNER JOIN colegiaturas_detalle CD ON C.idColegiatura = CD.idColegiatura
  8.     CD.cancelado = '0'
  9.     AND CD.pagado = '1'
  10.     AND C.pago <> ''
  11.     AND (CD.folio LIKE '%di%' OR A.nombre LIKE '%di%' )

Por cierto: Procura usar alias para facilitar la escritura y lectura, y también escríbelas estructuradamente. Cuando lo haces es más fácil ver los problemas.
__________________
¿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 05/11/2012, 12:40
 
Fecha de Ingreso: mayo-2009
Mensajes: 242
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: Problema en consulta con varios LIKE

Muchas gracias esa era la solución, la agrupación.

Etiquetas: join, select, sql
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 03:01.