Ir ao conteúdo
  • Cadastre-se

MySQL Erro com inner join sql e laravel


Posts recomendados

Eu tenho três tabelas. Usuários, Anúncios e Fotos. A query que eu estou fazendo é para pegar o id do anúncio, o título, a quantidade de visualizações e a primeira foto deste anúncio da tabela de fotos. Já que um único anúncio pode ter várias fotos. Até aí tudo bem, mas quando eu coloco o group by me dá este erro

 

1055 - Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'vivachapeco.fotosanuncio.foto' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

 

Eu preciso pegar uma única foto porque na página onde será exibido esta query, o resultado se repete só por causa da quantidade de fotos. Então, o anúncio com id 1 vai ser repetido 5 vezes porque ele possui 5 fotos, quando na verdade, gostaria de ter apenas uma foto dele.

A query está assim

SELECT `anuncios`.`id_anuncio`, `anuncios`.`id_user`, `anuncios`.`titulo`, `anuncios`.`visualizacoes`, `fotosanuncio`.`foto` FROM `anuncios` 
INNER JOIN `users` ON `users`.`id_user` = `anuncios`.`id_user` 
INNER JOIN `fotosanuncio` ON `fotosanuncio`.`id_anuncio` = `anuncios`.`id_anuncio` 
WHERE `users`.`id_user` = 3 
GROUP BY `fotosanuncio`.`id_anuncio`;

Já se eu tiro a group by, funciona "corretamente", porém, como tenho o anúncio, 1 e 2 com uma foto cada uma e o anúncio 3 com duas fotos, me retorna 4 valores, ao invés de retornar 3 valores já que a intenção é agrupar todos os resultados das fotos por anúncio.

Link para o comentário
Compartilhar em outros sites

Cara, eu não manjo tanto assim de comandos SQL, mas acredito que "GROUP BY" seja mais utilizado para algo como o SUM(), então ele talvez não seja necessário ou nem sequer possível ser usado nesse comando que fez, por isso ele da erro (Isso é baseado no que tenho no cérebro!).

Eu acredito que tenham outras soluções para isso, mas lembro que fiz assim:

Numa loja que criei tinha algo bem parecido com isso que você quer, e na galeria de cada produto coloquei uma coluna que representaria a foto principal, ela seria destaque para tal produto, era um valor BOOLEAN simples, se tivesse 1, essa imagem seria usada para todas representações deste produto, se tivesse 0 essa imagem só seria apresentada caso fosse solicitado os detalhes dela pelo cliente (basicamente se ele clicasse no produto e fosse para a página completa) eu criei um programa para alterar automaticamente o campo do BOOLEAN, caso ele encontre mais que um valor, isso seria bem simples até ...

Baseado na ideia de criar esse campo a mais com o boolean, e afirmando que ele se chame "bol_publico", teremos o seguinte SQL:

 

SELECT `anuncios`.`id_anuncio`, `anuncios`.`id_user`, `anuncios`.`titulo`, `anuncios`.`visualizacoes`, `fotosanuncio`.`foto` FROM `anuncios`
LEFT JOIN `fotosanuncio` ON `fotosanuncio`.`id_anuncio` = `anuncios`.`id_anuncio` 
INNER JOIN `users` ON `users`.`id_user` = `anuncios`.`id_user` 
WHERE `users`.`id_user` = 3 AND `fotosanuncio`.`bol_publico` = 1

 

Boa sorte, espero ter dado um help.   ^^

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...