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 originalSELECT n.idNoticia
, n.titulo
, n.urlImagen
, n.subTitulo
, n.fecha
WHERE (n.idFigura
= ?
OR f.idLinea
= ?
)
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.