Jump to content


Photo

Qual O Melhor Jeito De Fazer Uma Busca Em Tabela N:N Para Depois Usar


  • Faça o login para participar
1 reply to this topic

#1 GreyWolf

GreyWolf

    Mestre

  • Usuários
  • 674 posts
  • Sexo:Não informado

Posted 05/01/2012, 07:34

Opa pessoal.

Tenho uma tabela de links, uma de tags e uma de links_tags

Queria saber a melhor forma de pesquisar os dados relacionados para que depois eu possa fazer uma paginação.

Antes de pensar na paginação eu uni as tabelas:
SELECT `L`.*, `T`.`nome` AS `t_nome`, `LT`.*, `L`.* FROM `tags` AS `T` RIGHT JOIN `links_tags` AS `LT` ON T.id = LT.tag_id RIGHT JOIN `links` AS `L` ON LT.link_id = L.id ORDER BY `L`.`id` ASC

Isso retornava vários registros iguais de link mas com as tags diferentes e na programação eu ajustava isso.

Para fazer paginação não funcionaria pois se eu quisesse listar 10 links por pagina e 1 link tivesse 10 tags, apenas ele seria mostrado.


O que penso atualmente é buscar 10 links da tabela de links e depois buscar as tags de cada link nas outras tabelas.


O problema:
10 links por pagina = 1 sql a mais para cada um.

Se for listar 100 links, já aumentaria mais ainda.
Em um sistema com muitos usuários, geraria muitas querys.

Ainda sim seria a melhor prática?

Não consigo pensar em outra até o momento.

Obrigado.

#2 shayllis

shayllis

    12 Horas

  • Usuários
  • 152 posts
  • Sexo:Masculino
  • Localidade:Barueri - SP
  • Interesses:PHP, MySQL, ASP.NET C# e VB, DreamWeaver, VisualStudio, JavaScript

Posted 07/01/2012, 15:38

Primeiramente o seu SQL está com um pequeno problema de lógica, use left join sempre, nunca right join, consome um pouco menos... faça o caminho inverso na prioridade, a tabela mais importante e vá descendo...
Segundo realmente não dah neste caso para fazer algo deste gênero... o que você teria que fazer seria um segundo select para pegar aqueles elementos repetitivos...
A menos que você faça alguma função para trabalhar em cima disto no seu código, seja PHP ou ASP.net




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq