Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Dawman en 30 Octubre 2013, 22:20 pm



Título: SQL consulta senzilla
Publicado por: Dawman en 30 Octubre 2013, 22:20 pm
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
  1.  
  2. SELECT
  3.    noticia.*,
  4.    noticia_foto.*
  5. FROM
  6.   noticia LEFT JOIN noticia_foto ON noticia_id = noticia_foto_noticia_fk AND noticia_foto_principal = 1
  7. WHERE
  8.   noticia_actiu = 1  
  9.  
  10.  Aqui me hace falta una restirccion para para que muestra las noticias con id diferente
  11.  
  12. ORDER BY
  13.   noticia_data DESC;
  14.  
  15.  


Título: Re: SQL consulta senzilla
Publicado por: 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-?


Título: Re: SQL consulta senzilla
Publicado por: Dawman en 30 Octubre 2013, 23:18 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)


Título: Re: SQL consulta senzilla
Publicado por: DanteInfernum en 2 Noviembre 2013, 03:16 am
Fijate si te sirve esto:

Código
  1. USE Master
  2. GO
  3. CREATE DATABASE Noticias
  4. GO
  5.  
  6. USE Noticias
  7. GO
  8.  
  9. CREATE TABLE Noticias(
  10. idNoticia INT PRIMARY KEY,
  11. nombre VARCHAR(50)
  12. )
  13.  
  14. CREATE TABLE Fotos(
  15. idFoto INT PRIMARY KEY,
  16. noticia INT FOREIGN KEY REFERENCES Noticias(idNoticia)
  17. )
  18. GO
  19.  
  20. INSERT INTO Noticias VALUES(1, 'noticia 1');
  21. INSERT INTO Noticias VALUES(2, 'noticia 2');
  22. INSERT INTO Noticias VALUES(3, 'noticia 3');
  23. INSERT INTO Noticias VALUES(4, 'noticia 4');
  24.  
  25. INSERT INTO Fotos VALUES(1, 1);
  26. INSERT INTO Fotos VALUES(2, 1);
  27. INSERT INTO Fotos VALUES(3, 1);
  28. INSERT INTO Fotos VALUES(4, 2);
  29.  
  30. GO
  31.  

Código
  1. SELECT nombre, foto
  2. FROM noticias LEFT JOIN (
  3. SELECT  noticia, MAX(idfoto) AS foto
  4. FROM fotos
  5. GROUP BY noticia
  6. ) AS fotos
  7. ON noticias.idNoticia = fotos.noticia
  8.  

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