Ir para conteúdo

POWERED BY:

Arquivado

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

Marcelo Lopes de Oliveira

Usando Join e MIN() em uma consulta, como?

Recommended Posts

Boa tarde!

 

Depois de tanto quebrar a cabeça vim pedir ajuda aos amigos no forum.

 

Tenho duas tabelas que são: produto e fotos.

Para exibir os produtos mesmo que não existam fotos na tabela foto usei o LEFT JOIN

Ex:

SELECT a.id, a.produto, b.foto
FROM tabela_produtos AS a LEFT JOIN tabela_fotos as b ON a.id = b.id_produto

 

Ate ai tudo perfeito.

O problema é que podem existir mais de uma foto para cada produto e quando isto acontece que que exiba somente uma, foi onde tentei usar um MIN("id") mas não da certo, assim só exibe uma foto mas não mostra os produtos que não tem foto cadastrada.

EX:

SELECT a.id, a.produto, b.foto
FROM tabela_produtos AS a LEFT JOIN tabela_fotos as b ON a.id = b.id_produto
WHERE b.id_foto=(Select MIN(b.id_foto) FROM tabela_fotos as b)

 

Alguém sabe como resolvo o problema?

 

Desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um response.write na sua string SQL para evr o que esta sendo passado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando uso a expressão:

SELECT a.id, a.produto, b.foto
FROM tabela_produtos AS a LEFT JOIN tabela_fotos as b ON a.id = b.id_produto

 

Ele exibe assim:

 

id foto

1 teste

2 teste2

3 (não tem foto)

4 teste3

4 teste4

4 teste5

Ou seja vai repetindo o registro enquanto o mesmo tem foto.

 

Usando:

SELECT a.id, a.produto, b.foto
FROM tabela_produtos AS a LEFT JOIN tabela_fotos as b ON a.id = b.id_produto
WHERE b.id_foto=(Select MIN(b.id_foto) FROM tabela_fotos as B)

 

Ele so exibe um registro com foto:

 

id foto

4 foto3

 

tá osso,,,,,

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos lá... vc quer que ele exiba normalmente, porém se o user X tem 2 imagens, vc quer que exiba apenas a primeira imagem. seria isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo MIN ele irá retornar o valor mínimo apenas, vc poderia, recuperar esses valores atraves de um select convencional, jogar num array e pegar o primeiro, ou seja [0], e exibir somente este

Compartilhar este post


Link para o post
Compartilhar em outros sites

para não repetidos use a palavra chave DISTINCT pode ser usada para retornar apenas valores distintos (diferentes).


SELECT DISTINCT Cidade FROM Pessoas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Limit é para MySQL

TOP - SQL Server/Access

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim o top pega apenas o número de registro especificado, tipo:

 

TOP 2, devolve somente os dois primeiros registros.

 

TOP não irá ajudar vc ai. recupere esses valores através de um select convencional, jogue num array e pegue o primeiro, ou seja [0], e exiba somente este

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal agradeço pela ajuda, boa a ideia de guardar o resultado numa array mas a principio resolvi fazer vamos dizer uma "gambiarra".

Coloquei pra salvar as fotos renomeando-as para ano/mes/dia/minuto/segundo.jpg. Assim alem da foto nunca ser gravada com o mesmo nome consigo usar o MIN() ou seja, so vai exibir a primeira foto cadastrada para cada produto.

Então ficou assim:

 

SELECT a.id, a.produto, MIN(b.foto) as foto

FROM tabela_produtos AS a LEFT JOIN tabela_fotos as b ON a.id = b.id_produto

Group BY a.id, a.produto

Order BY a.id

 

Se alguém tiver uma solução melhor por favor postem.

 

Vlw a todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

POG (programação Orientada a gambiarra)...

 

sempre funciona, me salvou e várias

 

POG.jpg

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.