SQL consulta senzilla

Iniciado por Dawman, 30 Octubre 2013, 22:20 PM

0 Miembros y 1 Visitante están viendo este tema.

Dawman

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!!
Código (sql) [Seleccionar]


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;


Shell Root

#1
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-?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Dawman

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)

DanteInfernum

Fijate si te sirve esto:

Código (sql) [Seleccionar]

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


Código (sql) [Seleccionar]

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).