Marcelo Lopes de Oliveira 1 Denunciar post Postado Novembro 12, 2013 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.fotoFROM 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.fotoFROM tabela_produtos AS a LEFT JOIN tabela_fotos as b ON a.id = b.id_produtoWHERE 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
xanburzum 169 Denunciar post Postado Novembro 12, 2013 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
Marcelo Lopes de Oliveira 1 Denunciar post Postado Novembro 12, 2013 Quando uso a expressão: SELECT a.id, a.produto, b.fotoFROM 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.fotoFROM tabela_produtos AS a LEFT JOIN tabela_fotos as b ON a.id = b.id_produtoWHERE 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
xanburzum 169 Denunciar post Postado Novembro 12, 2013 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
Marcelo Lopes de Oliveira 1 Denunciar post Postado Novembro 12, 2013 Isso! tipo se tem mais de uma imagem mostrar somente a primeira a ser cadastrada por exemplo. Compartilhar este post Link para o post Compartilhar em outros sites
xanburzum 169 Denunciar post Postado Novembro 12, 2013 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
Marcelo Lopes de Oliveira 1 Denunciar post Postado Novembro 12, 2013 Existe alguma forma de não exibir os campos repetidos no loop? Compartilhar este post Link para o post Compartilhar em outros sites
xanburzum 169 Denunciar post Postado Novembro 12, 2013 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
Marcelo Lopes de Oliveira 1 Denunciar post Postado Novembro 12, 2013 Não funciona. Vi algo sobre sub consultas mas não estou conseguindo, Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 13, 2013 http://www.w3schools.com/sql/sql_top.asp Limit , rownum , top Compartilhar este post Link para o post Compartilhar em outros sites
xanburzum 169 Denunciar post Postado Novembro 13, 2013 Limit é para MySQL TOP - SQL Server/Access Compartilhar este post Link para o post Compartilhar em outros sites
Marcelo Lopes de Oliveira 1 Denunciar post Postado Novembro 13, 2013 OK, Como estou fazendo testes com o Access utilizei o TOP. O problema é que mostra só um registro e não só uma foto. tá complicado isso... Compartilhar este post Link para o post Compartilhar em outros sites
xanburzum 169 Denunciar post Postado Novembro 13, 2013 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
Marcelo Lopes de Oliveira 1 Denunciar post Postado Novembro 13, 2013 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
xanburzum 169 Denunciar post Postado Novembro 13, 2013 POG (programação Orientada a gambiarra)... sempre funciona, me salvou e várias Compartilhar este post Link para o post Compartilhar em outros sites