Hola a todos...
tengo esta consulat con la cual pretendo obtener datos de 2 tablas diferentes...
Noticia y noticia foto
tal y como tengo la consulta me saca todas las noticias que son activas y en caso que tengan asociada un foto prinicpal la mostraria tambien en caso contrario solo saca la noticia sin foto...
el problema de mi consulta es que si una noticia tiene asociada mas de una foto, me repite la noticia con las diferentes fotos...y no hay DISTINCT que valga!!
SELECT
noticia.*,
noticia_foto.*
FROM
noticia LEFT JOIN noticia_foto ON noticia_id = noticia_foto_noticia_fk AND noticia_foto_principal = 1
WHERE
noticia_actiu = 1
Aqui me hace falta una restirccion para para que muestra las noticias con id diferente
ORDER BY
noticia_data DESC;
Obvio porque el DISTINCT se ejecuta siempre y cuando los registros sean iguales, y supongo que la noticia y la foto son independientes, es decir, unicos.
Lo que entendi fue qué, necesitas mostrar un listado de noticias, que contenga, 1 Noticia + 1 imagen -sin importar si la noticia tenga más imagenes-?
Cita de: Shell Root en 30 Octubre 2013, 22:32 PM
Obvio porque el DISTINCT se ejecuta siempre y cuando los registros sean iguales, y supongo que la noticia y la foto son independientes, es decir, unicos.
Lo que entendi fue qué, necesitas mostrar un listado de noticias, que contenga, 1 Noticia + 1 imagen -sin importar si la noticia tenga más imagenes-?
Mas o menos...
Siempre hay que mostrar la noticia, tenga foto o no tenga...
la questio és cuando una misma noticia tenga mas de una foto, entonces tiene que mostrar la noticia y una foto(cualquiera de las que hay)
Fijate si te sirve esto:
USE Master
go
Create Database Noticias
go
USE Noticias
go
CREATE TABLE Noticias(
idNoticia int PRIMARY KEY,
nombre varchar(50)
)
CREATE TABLE Fotos(
idFoto int PRIMARY KEY,
noticia int FOREIGN KEY REFERENCES Noticias(idNoticia)
)
go
INSERT INTO Noticias VALUES(1, 'noticia 1');
INSERT INTO Noticias VALUES(2, 'noticia 2');
INSERT INTO Noticias VALUES(3, 'noticia 3');
INSERT INTO Noticias VALUES(4, 'noticia 4');
INSERT INTO Fotos VALUES(1, 1);
INSERT INTO Fotos VALUES(2, 1);
INSERT INTO Fotos VALUES(3, 1);
INSERT INTO Fotos VALUES(4, 2);
go
SELECT nombre, foto
FROM noticias LEFT JOIN (
SELECT noticia, Max(idfoto) as foto
FROM fotos
GROUP BY noticia
) as fotos
ON noticias.idNoticia = fotos.noticia
Como dijiste que te sirve cualquier foto, acá estoy seleccionando la foto con mayor número de Id de cada noticia.
En el ejemplo: la noticia 1 está relacionada con 3 fotos distintas; la foto con mayor id es la foto número 3; entonces la consulta devuelve noticia 1 con foto 3 (una única foto).