Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/08/2013, 18:26
Myl
 
Fecha de Ingreso: agosto-2011
Mensajes: 61
Antigüedad: 12 años, 8 meses
Puntos: 3
Problema con OR y AND

Hola

Estoy desarrollando un sitio de figuras de acción donde cada figura posee una linea distinta. Ahora intento realizar un sistema de noticias que a su vez me relacione cada noticia con una respectiva figura. Y me ha resultado.

Tengo las siguientes tablas:
Código MySQL:
Ver original
  1. CREATE TABLE linea (
  2.     idLinea INT AUTO_INCREMENT NOT NULL,
  3.     nombreLinea VARCHAR(40) NOT NULL,
  4.     PRIMARY KEY (idLinea)
  5. )ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;

Código MySQL:
Ver original
  1. CREATE TABLE noticia (
  2.     idNoticia INT AUTO_INCREMENT NOT NULL,
  3.     idFigura INT NOT NULL,
  4.     fecha INT NOT NULL,
  5.     idUsuario INT NOT NULL,
  6.     relacion BOOLEAN NOT NULL,
  7.     urlImagen VARCHAR(100) NOT NULL,
  8.     titulo VARCHAR(80) NOT NULL,
  9.     subTitulo VARCHAR(250) NOT NULL,
  10.     cuerpo TEXT NOT NULL,
  11.     PRIMARY KEY(idNoticia)
  12. )Engine=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
  13.  
  14. ALTER TABLE noticia ADD CONSTRAINT FK_idFigura_N
  15. FOREIGN KEY (idFigura) REFERENCES figura (idFigura);

Código MySQL:
Ver original
  1. CREATE TABLE figura (
  2.     idFigura INT AUTO_INCREMENT NOT NULL,
  3.     imgFigura VARCHAR(60) NOT NULL,
  4.     imgFiguraLista VARCHAR(60) NOT NULL,
  5.     idLinea INT NOT NULL,
  6.     fechaLanzamiento DATE,
  7.     precio INT,
  8.     idTipoCuerpo INT NOT NULL,
  9.     nombreFigura VARCHAR(40) NOT NULL,
  10.     descripcion TEXT,
  11.     PRIMARY KEY (idFigura)
  12. )Engine=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
  13.  
  14. ALTER TABLE figura ADD CONSTRAINT FK_idLineaF
  15. FOREIGN KEY (idLinea) REFERENCES linea (idLinea);

El problema que tengo es que al hacer una consulta como esta:

Código MySQL:
Ver original
  1. SELECT n.idNoticia, n.titulo, n.urlImagen, n.subTitulo, n.fecha FROM noticia n INNER JOIN figura f ON n.idFigura = f.idFigura
  2. WHERE n.idFigura = ?
  3. AND n.relacion = TRUE
  4. AND n.idNoticia != ?
  5. OR f.idLinea = ?

No respeta las clausulas
AND n.relacion = TRUE
AND n.idNoticia != ?


Todo esto supongo que es por la clausula OR f.idLinea = ? donde trae todo lo relacionado con la figura y la linea de la figura aun cuando le diga que ciertas noticias no deben ser mostradas o que el atriburo relacion, debe tener un valir especifico. ¿Hay alguna forma de "obligar" a MySQL a que respetas tales clausulas?.

Podria arreglar este problema del codigo, podria simplementer hacer un if mientras hago el fetch de la consulta, pero no es la idea.

Podria alguien ayudarme por favor?

Última edición por gnzsoloyo; 25/08/2013 a las 19:35 Razón: Completamente mal etiquetado.