SQL + ACCESS + ASP - Contar comentarios

Carlos Moreira

Power Member
Viva.

Tenho uma base de dados em access com as seguintes tabelas:

>tblcoments
idComent
idfromNoticia
etc..

>tblNoticia
idNoticia
etc..

Basicamente queria fazer uma consulta em SQL em que me devolve-se todos os dados da noticia e uma variavel que corresponde-se ao numero de comentários em cada notícia. O pior é que pelos vistos o Access tem umas limitações e não responde correctamente ao COUNT DISTINCT que é o que tenho de usar, pela pesquisa que fiz. Estou há muito tempo nisto e não saio do sitio.

Alguém já fez algo semelhante e me pode ajudar?

Obrigado desde já.
 
SELECT *
FROM tblNoticia, ( SELECT idfromNoticia,COUNT(*) as numComm
FROM tblcoments
GROUP BY idfromNoticia ) as contagem
WHERE tblNoticia.idNoticia = contagem.idfromNoticia

Eu em vez do SELECT * poria os campos todos à unha e adicionalmente punha o numComm mas assim também funciona ;)
 
Obrigado pela ajuda, parece que estou no bom caminho, mas ainda não consigo!

O primeiro problema é q a consulta só me está a devolver as noticias onde existem comentários..
Outra coisa: qual a sintaxe para devolver o numero de comentários? pensava que fosse <%=noticias("contagem")%> mas pelos vistos não é :S

A minha consulta SQL está bastante longa, pois preciso filtrar informação e fazer umas correspondências:

Código:
SELECT dtData, IdAutor, intDestaque,tblNoticias.intIDCategoria, intIDNoticia, intIDSubCategoria, intTipo, intVerificacao, txtImagem, txtResumo, txtTexto, txtTitulo, intIdCat, txtNomeCat, IDSubCategoria, txtNome  FROM tblNoticias, tblCategoriasNoticias, tblSubcategoriaNoticias,( SELECT intIDReview,COUNT(*) as numComm
FROM tblComentariosNoticia  GROUP BY intIDReview ) as contagem
WHERE tblNoticias.intIDNoticia = contagem.intIDReview AND tblNoticias.intIDCategoria =  intIdCat AND intIDSubCategoria = IDSubCategoria AND  intTipo = 1 AND  intVerificacao = 1
ORDER BY intIDNoticia DESC

Onde o mais importante será :

tblNoticias : intIDNoticia
tblComentariosNoticia : intIDComentario , intIDReview (que corresponde ao ID da Noticia IDfromNoticia no exmplo anterior).

Obrigado novamente pela ajuda.

PS: Sou um azelha nisto
 
Carlos Moreira disse:
Obrigado pela ajuda, parece que estou no bom caminho, mas ainda não consigo!

O primeiro problema é q a consulta só me está a devolver as noticias onde existem comentários..
Outra coisa: qual a sintaxe para devolver o numero de comentários? pensava que fosse <%=noticias("contagem")%> mas pelos vistos não é :S

A minha consulta SQL está bastante longa, pois preciso filtrar informação e fazer umas correspondências:

Código:
SELECT dtData, IdAutor, intDestaque,tblNoticias.intIDCategoria, intIDNoticia, intIDSubCategoria, intTipo, intVerificacao, txtImagem, txtResumo, txtTexto, txtTitulo, intIdCat, txtNomeCat, IDSubCategoria, txtNome  FROM tblNoticias, tblCategoriasNoticias, tblSubcategoriaNoticias,( SELECT intIDReview,COUNT(*) as numComm
FROM tblComentariosNoticia  GROUP BY intIDReview ) as contagem
WHERE tblNoticias.intIDNoticia = contagem.intIDReview AND tblNoticias.intIDCategoria =  intIdCat AND intIDSubCategoria = IDSubCategoria AND  intTipo = 1 AND  intVerificacao = 1
ORDER BY intIDNoticia DESC

Onde o mais importante será :

tblNoticias : intIDNoticia
tblComentariosNoticia : intIDComentario , intIDReview (que corresponde ao ID da Noticia IDfromNoticia no exmplo anterior).

Obrigado novamente pela ajuda.

PS: Sou um azelha nisto

Quanto ao primeiro problema devias ter dito que querias que eles aparecessem então... :007: para aparecerem é da seguinte forma:
SELECT *
FROM tblNoticia LEFT JOIN ( SELECT idfromNoticia,COUNT(*) as numComm
FROM tblcoments
GROUP BY idfromNoticia ) as contagem
ON tblNoticia.idNoticia = contagem.idfromNoticia
:)

Quanto ao problema da sintaxe sinceramente não sei ... isso já envolve ASP parece-me e nisso sou eu o azelha :p
 
Ok, já está funcionar! Já devolve todos os comentários e também já por a aparecer os comentários! Mas agora não sei como fazer a junção de outras duas tabelas!

Tenhu uma tabela com as categorias das noticas [tblCategoriasNoticias] com um IDCat e o Nome e na [tblNoticias] tenho o campo IDCategoria. Queria fazer a correspondencia entre as duas tabelas! Como nunca usei Joins não sei como encaixar isto aqui.. dantes fazia de outra forma.. já tentei de várias formas e dá-me sempre erro de sintaxe..
Código:
SELECT *  
FROM tblNoticias  
LEFT JOIN ( SELECT intIDReview,COUNT(*) as numComm
FROM tblComentariosNoticia  GROUP BY intIDReview ) as contagem  ON tblNoticias.intIDNoticia = contagem.intIDReview
WHERE intTipo = 1 AND intVerificacao = 1

Só preciso colocar aqui a Categoria..

Uma ajudinha?

Obrigadão _freelancer pela ajuda dada até agora.

EDIT:

Nevermind.. consigo dar a volta só com a consulta anterior, vai ter de servir :) . Obrigado pela ajuda. :)
 
Última edição:
viva!

fiz a mesma coisa noutra página, desta vez em php e mySQL, mas o SQL n devolve o id das noticias que não têm comentários.. como resolvo o problema?

Código:
SELECT *
FROM noticias LEFT JOIN ( SELECT noticiasID,COUNT(*) as num FROM comentarios
GROUP BY noticiasID ) as contagem ON noticias.noticiasID = contagem.noticiasID
ORDER BY noticias.noticiasID DESC

obrigado!
 
olá,

Primeiro devo confessar que com ajuda deste forum já consegui resolver muitos dos problemas em programaçõ web que possuia, daí agradecimento a todos aqueles que colaboram para o enriquecimento deste espaço!

Não sei se é este o espaço indicado para estar a fazer este tipo de declarações por isso peço desculpa se houver algum inconveniente, mas gostaria de realçar o papel dos administradores e colaboradores para o sucesso desta aplicação.

Como tenho acompanhado o processo de contagem do numero comentários, cheguei a esta parte com o mesmo problema do carlos moreira: SQL não devolve o ID das noticias. Faz a contagem mas não devolve o ID das noticias.

cumpr.
Pacheco
 
Carlos atenção ao seguinte, por vezes o sql tem comportamentos estranhos nos joins e em vez de estar a devolver 0 no count devolve null e aí deves apenas colocar sempre qualquer coisa do estilo NVL(Count(x),0) de modo a que se for nulo assumir o 0 e fazer o join na mesma.
 
Id noticias

SELECT *
FROM noticias LEFT JOIN (SELECT noticiasID,Count(*) as num FROM comentarios
GROUP BY noticiasID ) as contagem ON noticias.noticiasID = contagem.noticiasID
ORDER BY noticias.noticiasID DESC


SQL já devolve o numero de comentários, mas unicamente akeles que já foram comentados. Os que ainda não foram comentados SQL não devolve o ID da noticia não permitindo ir para DETAIL PAGE e ver noticia completa...

não sei se me estão e entender e de certeza que a solução deve ser simples eu já estou é um pouco bloqueado.

SELECT *
FROM noticias LEFT JOIN (SELECT noticiasID,Count(*), 0 as num FROM comentarios
GROUP BY noticiasID ) as contagem ON noticias.noticiasID = contagem.noticiasID
ORDER BY noticias.noticiasID DESC

Se colcar a variável "0" ele devolve todos os comentários a 0.

Não sei se o carlos moreira conseguiu resolver o problema dele... também gostaria de saber se é este problema exacto?

cumpr. obrigado
Pacheco
 
Back
Topo