Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/08/2013, 19:33
Avatar de gnzsoloyo
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: Problema con OR y AND

Cita:
No respeta las clausulas
AND n.relacion = TRUE
AND n.idNoticia != ?
Estás en un completo error. El problema no es que MySQL "no respeta", sino que las cláusulas están mal construidas.
Esto es lógica proposicional, y un OR es una disyunción, que "quiebra" un conjunto de cláusulas, en dos, ya que un OR es TRUE si al menos una de las dos partes es verdad.
En otras palabras, todas las cláusulas son mandatorias (deben sí o si ser TRUE), pero cuando pones el OR en esas condiciones, con sólo que se cumpla "f.idLinea = ?" alcanza.
En otras palabras, el "f.idLinea = ? " debe ser parte de otra condición y estar encerrada entre paréntesis.
Por ejemplo:
Código MySQL:
Ver original
  1. SELECT n.idNoticia, n.titulo, n.urlImagen, n.subTitulo, n.fecha
  2. FROM noticia n INNER JOIN figura f ON n.idFigura = f.idFigura
  3. WHERE (n.idFigura = ?  OR f.idLinea = ? )
  4. AND n.relacion = TRUE
  5. AND n.idNoticia != ?
En ese contexto, idfigura debe ser igual a un valor pasado por parámetro, relacion ser TRUE y luego o bien idNoticia es igual a algun parámetro, o idLinea igual a otro, o bien ambos son TRUE.

¿Se entiende?

Ten en cuenta siempre, que los DBMS no cometen errores. Si las clasulas no parecen cumplirse, no es problema del DBMS, es que el programador no está haciendo la consulta correctamente, o bien no hay datos en la base que cumplan con lo pedido.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)