tony_lu 1 Denunciar post Postado Outubro 22, 2011 Ola pessoal, td bem? Preciso de uma ajuda, to fazendo um site de games, e todo usuario possui uma lista com os jogos favoritos, e a tabela esta assim: codFavorito | idJogo |codUsuario O idJogo, armazena o codigo do jogo e o codUsuario armazena o codigo do usuario no banco... O que eu preciso é listar na tela os jogos mais populares, dessa forma tentei usar o "count" para saber qual jogo aparece mais na tabela e ordenar pelo que mais aparece, mas me retorna apenas 1 linha com o nome do jogo que tem mais registro no banco ... só que eu preciso da lista dos 10 mais....segue o sql que tentei: SELECT * FROM `favoritos` a inner join jogos b ON a.idJogo = b.idJogo order by count( a.idJogo) Dei o inner join na tabela de jogos para pegar o nome do jogo... enfim alguem pode me ajudar a listar os jogos que tem mais registros da tabela favoritos? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Outubro 22, 2011 Voce não postou as estruturas das duas tabelas mas creio que seja algo como o que posto abaixo Limitei aos 10 mais populares mas se for todos basta tirar o LIMIT SELECT jogos.idJogo, jogos.nome, Count( favoritos.idJogo ) AS total FROM jogos INNER JOIN favoritos ON jogos.idJogo = favoritos.idJogo GROUP BY favoritos.idJogo HAVING Count( favoritos.idJogo ) > 0 ORDER BY Count( favoritos.idJogo ) DESC LIMIT 10 Compartilhar este post Link para o post Compartilhar em outros sites
tony_lu 1 Denunciar post Postado Outubro 22, 2011 Voce não postou as estruturas das duas tabelas mas creio que seja algo como o que posto abaixo Limitei aos 10 mais populares mas se for todos basta tirar o LIMIT mario, obrigado ficou perfeito... só queria entender melhor essa query para meu conhecimento mesmo, poderia dar um resumo da sua logica? obrigado mais uma vez ... Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Outubro 22, 2011 Deixa eu tentar explicar então Esta primeira parte são os campos que selecionei e também o total de ocorrências do jogo na tabela favoritos SELECT jogos.idJogo, jogos.nome, Count( favoritos.idJogo ) AS total Para isso funcionar precisa fazer mais algumas coisas Relacionar as tabelas que serão selecionadas FROM jogos INNER JOIN favoritos ON jogos.idJogo = favoritos.idJogo Precisa agrupar em torno do campo que será usado para contar os favoritos GROUP BY favoritos.idJogo HAVING Count( favoritos.idJogo ) > 0 No fim só ordenar e limitar a quantidade de resultados desejados ORDER BY Count( favoritos.idJogo ) DESC LIMIT 10 Compartilhar este post Link para o post Compartilhar em outros sites