zrod 0 Denunciar post Postado Abril 22, 2009 Boa tarde, Estou com um problema para calcular o total de comentarios (sum) de todos os posts de uma categoria: 'Categoria' has many 'Posts' 'Posts' has many 'Comments' 'Comments' pertence a 'Posts' Eu consigo pegar o total de comentarios em cada post atraves da query: SELECT posts.id_post, posts.titulo, posts.categoria, (SELECT COUNT(*) FROM comments WHERE comments.post = posts.id_post) AS total_comments FROM posts ORDER BY total_comments DESC Essa query retorna: id_post | categoria | titulo | total_comments 56 | 1 | def | 6 89 | 2 | abc | 5 45 | 2 | klj | 5 99 | 1 | opp | 1 20 | 2 | sss | 0 Ok, agora vem o problema, eu quero exibir o total de comentarios de todos os posts juntos de cada categoria para que fique dessa maneira: id_categoria | nome_categoria | comentarios 2 | Musica | 10 1 | Filmes | 7Para isso tentei diversas queries mas nenhuma funciona:A) SELECT categoria.id_categoria, categoria.nome_categoria, SUM(total_comments) AS 'comentarios' FROM (SELECT posts.id_post, posts.titulo, posts.categoria, (SELECT COUNT(*) FROM comments WHERE comments.post = posts.id_post) AS total_comments FROM posts) As Alias INNER JOIN categoriaRetorna:1 | Filmes | 17 B ) SELECT categoria.id_categoria, categoria.nome_categoria, (SELECT SUM(*) FROM comments WHERE comments.post = posts.id_post) AS comentarios FROM categoria LEFT JOIN posts ON posts.categoria = categoria.id_categoria ORDER BY comentarios DESCRetorna: id_categoria | nome_categoria | comentarios 2 | Musica | 6 1 | Filmes | 4 1 | Filmes | 3 2 | Musica | 3 2 | Musica | 1 Repetindo, como eu faria para retornar minha query da seguinte forma: id_categoria | nome_categoria | comentarios 2 | Musica | 10 1 | Filmes | 7 Alguma idéia? Desde já agradeço Rodrigo Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Abril 22, 2009 Tente usar os joins... talvez na forma abaixo resolva seu problema: SELECT categoria.id_categoria, categoria.nome_categoria, COUNT(COMMENTS.POST) AS TOTAL AS comentarios FROM categoria LEFT JOIN COMMENTS ON (comments.post = posts.id_post) LEFT JOIN posts ON posts.categoria = categoria.id_categoria GROUP BY categoria.id_categoria, categoria.nome_categoria ORDER BY comentarios DESC []'s Compartilhar este post Link para o post Compartilhar em outros sites
zrod 0 Denunciar post Postado Abril 22, 2009 Obrigado, segue codigo final p/ quem precisar no futuro: SELECT categoria.id_categoria, categoria.nome_categoria, COUNT(comments.post) AS comentarios FROM categoria LEFT OUTER JOIN posts ON posts.categoria = categoria.id_categoria LEFT OUTER JOIN comments ON comments.post = posts.id_post Compartilhar este post Link para o post Compartilhar em outros sites