1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

SQL + ACCESS + ASP - Contar comentarios

Discussão em 'Programação' iniciada por Carlos Moreira, 24 de Agosto de 2005. (Respostas: 8; Visualizações: 1376)

  1. Carlos Moreira

    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á.
     
  2. _freelancer_

    _freelancer_ Power Member

    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 ;)
     
  3. Carlos Moreira

    Carlos Moreira Power Member

    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
     
  4. _freelancer_

    _freelancer_ Power Member

    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
     
  5. Carlos Moreira

    Carlos Moreira Power Member

    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: 25 de Agosto de 2005
  6. Carlos Moreira

    Carlos Moreira Power Member

    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!
     
  7. Jose_Pacheco

    Jose_Pacheco Power Member

    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
     
  8. jjoao

    jjoao Power Member

    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.
     
  9. Jose_Pacheco

    Jose_Pacheco Power Member

    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
     

Partilhar esta Página