Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Inside

[Resolvido] Agrupar fotos

Recommended Posts

Caros amigos,

 

eu tenho uma tabela que á muitos registros, este registro são fotos.

 

A estrutura da tabela é esta:

 

foto ----- categoria ----- album

 

então tenho registro assim:

 

foto1 ----- 12 ----- 1

foto2 ----- 12 ----- 1

foto3 ----- 12 ----- 1

foto4 ----- 36 ----- 8

foto5 ----- 36 ----- 8

 

Nessa faze eu precisaria mostrar os 3 últimos álbuns criados porém apenas a primeira foto de cada álbum.

 

Creio que devo usar o GROUP BY para isso porém não estou conseguindo. Eu tentei isso mas não funciona:

 

SQLi2 = "SELECT Top 3 foto_g,album,categoria,rlogdata FROM fotos order by id Desc GROUP BY album"

 

Alguém pode ajudar?

 

Obrigado pela atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Inside, tudo bom?

 

Tente isso:

 

SELECT DISTINCT Album, 
(SELECT TOP 1 Foto FROM Fotos WHERE Album = F.Album ORDER BY ID DESC) AS UltimaFoto
FROM Fotos F 
ORDER BY ID DESC

 

Esta pode não ser a melhor nem a mais rápida forma de fazer isso, mas por agora, é uma forma fácil de resolver o problema.

 

Este script está pegando os Albuns distintos da tabela Fotos.

--Isso retorna [1, 8]

Para cada um destes registros, uma subquery pega a foto mais recente que pertença a este album.

--Retorna Foto3 para Album 1, Foto5 para Album 8.

 

O resultado será um recordset desta forma:

 

------------------------------

| Album | UltimaFoto |

------------------------------

| 1 | Foto3 |

| 8 | Foto5 |

------------------------------

 

Não testei a query, qualquer problema me notifique.

Caso meus companheiros do forum tenham idéias melhores, peço que postem também pois acredito que devam ter formas melhores de fazer isso sem usar subquery.

 

Atenciosamente,

 

Anderson Schmitt

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Anderson

 

Obrigado pela resposta. Eu tentei assim:

 

SQLi2 = "SELECT DISTINCT album, (SELECT TOP 1 foto_g,categoria,rlogdata FROM fotos WHERE album = F.album ORDER BY ID DESC) AS UltimaFoto FROM fotos F ORDER BY ID DESC"

 

 

Mas está apresentando o erro:

 

ORDER BY clause (ID) conflicts with DISTINCT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Anderson

 

Obrigado pela resposta. Eu tentei assim:

 

SQLi2 = "SELECT DISTINCT album, (SELECT TOP 1 foto_g,categoria,rlogdata FROM fotos WHERE album = F.album ORDER BY ID DESC) AS UltimaFoto FROM fotos F ORDER BY ID DESC"

 

 

Mas está apresentando o erro:

 

ORDER BY clause (ID) conflicts with DISTINCT.

 

Olá Amigo, eu não havia testado essa query, realmente não funcionou, e não me atentei ao fato de que você precisava de mais campos como resultado.

 

Vamos fazer um novo teste, tente essa:

 

SELECT ID, Foto_G, Categoria, rLogData, Album
FROM Fotos
WHERE ID IN 
(SELECT MAX(ID) FROM Fotos GROUP BY Album)
ORDER BY ID DESC

 

Esta query ficou até melhor que a outra :)

testei no MySQL pois estou sem SQL Server aqui, mas acredito que funcione.

 

 

Atenciosamente,

 

Anderson Schmitt

Compartilhar este post


Link para o post
Compartilhar em outros sites

existem vários exemplos de thumbsnail, que postei no fórum , pode te ajudar, inclusive para ver a string SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Anderson

 

obrigado!!!! Deuscerto o seu código, muito obrigado.

 

É bem complicado, eu não iria conseguir sozinho.

 

Só tenho mais uma pergunta. Existe a possibilidade de mostrar apenas álbuns que tenham tenha 2 ou mais fotos. Não é preciso mostrar álbuns que tenham apenas 1 foto.

 

Obrigado mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Inside, tudo bom?

 

Que bom que deu certo.

Sim, é possível sim, isso pode ser feito através da clausula HAVING, note o uso dela após o GROUP BY.

 

Segue código atualizado:

SELECT ID, Foto_G, Categoria, rLogData, Album
FROM Fotos
WHERE ID IN 
(SELECT MAX(ID) FROM Fotos GROUP BY Album HAVING COUNT(*) > 1)
ORDER BY ID DESC

 

 

 

Atenciosamente,

Anderson Schmitt

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.