Ir para conteúdo

POWERED BY:

Arquivado

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

David Borges

[Resolvido] Inner Join + Distinct

Recommended Posts

Pessoal, td bem?

 

Estou tentando utilizar o distinct para evitar registros duplicados mas ele não funciona.

 

Andei googlando uma resposta, e parece que tem uma forma diferente de fazer isso quando a query envolve um join.

 

Resumindo a situação é a seguinte:

 

Tenho 2 tabelas - "Visitas" e "Empresas";

Quando um usuário visita à página da empresa eu gravo o id da empresa e a data da visita dentro da tab "Visitas".

Agora preciso trazer as EMPRESAS VISITADAS MAIS RECENTEMENTE, porém os registros não podem se repetir.

 

Alguém pode me dar uma força? Já tentei usar o group by mas também não deu certo.

 

sql_consulta = "SELECT distinct tb_relatorio_visit_emp.*, tb_empresa.login_tb_empresa, tb_empresa.chamada_tb_empresa, tb_empresa.nmfantasia_tb_empresa, tb_empresa.logo_tb_empresa, tb_empresa.chamada_tb_empresa  "

sql_consulta = sql_consulta & "from tb_relatorio_visit_emp "

sql_consulta = sql_consulta & "inner join tb_empresa "
sql_consulta = sql_consulta & "on tb_empresa.id_tb_empresa=tb_relatorio_visit_emp.id_empresa_tb_relatorio_visit_emp "

sql_consulta = sql_consulta & "order by tb_relatorio_visit_emp.data_visita desc limit 5"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse distinct do jeito que está ai está funcionando????

 

Você tem que por SELECT distinct(o_campo_a_ser_agurado) as nome_do_campo FROM table

 

Marco

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Marco, obrigado pela resposta, mas ainda não funcionou.

 

Os 2 selects que, tanto o meu quanto o seu, resultam na listagem correta da empresa, mas não evita a repetição.

 

O meu:

sql_consulta = "SELECT distinct tb_relatorio_visit_emp.*, tb_empresa.login_tb_empresa, tb_empresa.chamada_tb_empresa, tb_empresa.nmfantasia_tb_empresa, tb_empresa.logo_tb_empresa, tb_empresa.chamada_tb_empresa  "

sql_consulta = sql_consulta & "from tb_relatorio_visit_emp "

sql_consulta = sql_consulta & "inner join tb_empresa "

sql_consulta = sql_consulta & "on tb_empresa.id_tb_empresa=tb_relatorio_visit_emp.id_empresa_tb_relatorio_visit_emp "

sql_consulta = sql_consulta & "order by tb_relatorio_visit_emp.data_visita desc limit 5"

 

Como ficou o seu:

sql_consulta = "SELECT distinct (tb_relatorio_visit_emp.id_empresa_tb_relatorio_visit_emp) as empresa_visitada, tb_relatorio_visit_emp.*, tb_empresa.login_tb_empresa, tb_empresa.chamada_tb_empresa, tb_empresa.nmfantasia_tb_empresa, tb_empresa.logo_tb_empresa, tb_empresa.chamada_tb_empresa  "

sql_consulta = sql_consulta & "from tb_relatorio_visit_emp "

sql_consulta = sql_consulta & "inner join tb_empresa "

sql_consulta = sql_consulta & "on tb_empresa.id_tb_empresa=tb_relatorio_visit_emp.id_empresa_tb_relatorio_visit_emp "

sql_consulta = sql_consulta & "order by tb_relatorio_visit_emp.data_visita desc limit 5"

 

Testando o distinct em uma query simples ele funciona, mas quando faço a junção das tabelas ele deixa de funcionar, ou seja, é possível que o problema esteja no "inner join tb_empresa", mas também não tenho certeza pois já testei várias coisas e nenhuma deu certo.

 

Alguma outra dica?

 

Abçs e bom fds.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta usar no group by (tb_relatorio_visit_emp.id_empresa_tb_relatorio_visit_emp) ao invés do distinct

 

Marco

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marco, testei sua sugestão, mas utilizando esse group by a ordem muda para uma nova ordem que não é a correta.

 

Encontrei alguns fóruns no google que falam sobre esse problema do inner join com o group e distinct, mas não consegui aplicar a solução apresentada ao meu select.

 

Alguma outra sugestão?

 

Obrigado pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta o seu select como ficou agora.... você utilizou

 

sql_consulta = sql_consulta & "group by tb_relatorio_visit_emp.id_empresa_tb_relatorio_visit_emp order by MAX(tb_relatorio_visit_emp.data_visita) desc limit 5

 

Marco

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marco, perfeito! Deu certo! Muito obrigado!!

 

Veja como ficou o select com a sua sugestão!

 

Tem alguma explicação o pq não dava certo antes sem o MAX? rsrs

 

sql_consulta = "SELECT tb_relatorio_visit_emp.*, tb_empresa.login_tb_empresa, tb_empresa.chamada_tb_empresa, tb_empresa.nmfantasia_tb_empresa, tb_empresa.logo_tb_empresa, tb_empresa.chamada_tb_empresa  "

sql_consulta = sql_consulta & "from tb_relatorio_visit_emp "

sql_consulta = sql_consulta & "inner join tb_empresa "
sql_consulta = sql_consulta & "on tb_empresa.id_tb_empresa=tb_relatorio_visit_emp.id_empresa_tb_relatorio_visit_emp "

sql_consulta = sql_consulta & "group by tb_relatorio_visit_emp.id_empresa_tb_relatorio_visit_emp order by MAX(tb_relatorio_visit_emp.data_visita) desc limit 5"

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.