Ir para conteúdo

POWERED BY:

Arquivado

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

zrod

[Resolvido] Calcular total de comentarios em tabelas relacionadas

Recommended Posts

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 | 7
Para 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 categoria
Retorna:

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 DESC
Retorna:

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.