View Full Version : SQL + ACCESS + ASP - Contar comentarios
Carlos Moreira 24-08-2005, 04:44 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á.
_freelancer_ 24-08-2005, 08:09 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 ;)
Carlos Moreira 24-08-2005, 16:56 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:
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
_freelancer_ 24-08-2005, 18:49 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:
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... :016: 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
Carlos Moreira 24-08-2005, 21:09 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..
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. :)
Carlos Moreira 27-09-2005, 20:31 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?
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!
Jose_Pacheco 28-09-2005, 17:07 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.
Jose_Pacheco 29-09-2005, 15:34 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
|
|