Foros del Web » Programando para Internet » PHP »

Saber el numero de comentarios de X noticia?

Estas en el tema de Saber el numero de comentarios de X noticia? en el foro de PHP en Foros del Web. Hola! engo un sistema de publicación de noticias y tiene la opcion de añadir comentarios. Todoi funcviona perfecto y lo que quiero saber es como ...
  #1 (permalink)  
Antiguo 10/04/2003, 14:17
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 892
Antigüedad: 15 años, 10 meses
Puntos: 3
Saber el numero de comentarios de X noticia?

Hola!

engo un sistema de publicación de noticias y tiene la opcion de añadir comentarios. Todoi funcviona perfecto y lo que quiero saber es como saber el numero de comentarios qeu tiene X noticia.
Las noticias se almacenan en una tabla llamada diario y los comentarios en una tabla llamada comentarios.

La tabla comentarios tiene 4 campos:

id
idnoticia
nickcomentarios

Lo importante aqui es el id, que es el numero de comentarios que se han publicado en todas las noticia y el idnoticia es el ID de la noticia a la que pertenece el comentario. Es decir si la noticia es nota.php?id=23 cada vez que inserten un comentario en esa noticia el campo idnoticia tendra el valor de 23.
Entonces... comp podria hacer para contabilizar cuantas filas hay en una noticia en el que el idnoticia coincide con el id de la noticia?

En una paginaencontre este codigo pero no se como aplicarlo bien...

// conectas a tu BD .. etc etc ..

// ejecutas consulta de contar registros COUNT()
$consulta=mysql_query("SELECT COUNT(*) AS total_comentarios FROM comentarios WHERE comentario='$idnoticia'");

$total_comentarios=mysql_result($consulta,"total_c omentarios",0);

echo $total_comentarios."<a href=\"ver_comentario.php?id=$id\">opinar blabla bla</a>";
No se si seria asi.. tengo duda donde dice AS total_comentarios es decir..que va ahi.. y si en WHERE comentario="$idnoticia" si esta bien la variable... total que lo pongo asi peor no funciona xD

Espeor puedan ayudarme..

Saludos!
__________________
Equívocos sin importancia
  #2 (permalink)  
Antiguo 10/04/2003, 14:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Habría que ver la tabla "noticias" y sus "claves foraneas" que (campos llave, key) usas .. pero en pricipio tendrías que hacer una consulta tipo:

SELECT COUNT(*) AS total_comentarios FROM comentarios, noticias WHERE comentarios.idnoticia=noticias.id AND noticias.id='$idnoticia'");

Básicamente el id de una tabla = id de la otra tabla es lo que nos establece la relación entre ambas tablas del tipo 1->N

Podrías revisar tambien este artículo sobre Normalización de base de datos (Msyql):
http://www.mysql-hispano.org/page.php?id=16

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 10/04/2003, 14:40
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 892
Antigüedad: 15 años, 10 meses
Puntos: 3
Gracias Cluster... ahora me quedauna ultima duda...
Dode dice AS total_comentarios que es lo que debo de poner ahi.. es decir.. no tengo nada llamado total_comentarios..

Por cierto en la tabla donde estan las noticia hay estos campos

id ->auto_incrmeent y es el key
titulo ->titulo de la noticia
contenido ->toda la noticia
fecha ->fecha de la publicacion
seccion ->seccion a la que pertenece

Gracias!

Saludos
__________________
Equívocos sin importancia
  #4 (permalink)  
Antiguo 10/04/2003, 14:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
AS .. es un "alias" .. Osese, se generar una columna mas en tu consulta que haces con el resultado de esa función .. En este caso con el total que cuentas ...

Para acceder a los "alias" debes de llamarlo por su nombre como ya lo haces aquí:

$total_comentarios=mysql_result($consulta,"total_c omentarios",0);

o .. si tubieras algun while($row=mysql_fetch_array()) .. sería un:

$row['total_comentarios']

Cualquier duda mas al respecto .. usa preferentemente el foro "Base de datos" y/o revisa el manual de Mysql: www.mysql.com (y el link que te dejé de mysql-hispano.com )

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 10/04/2003, 15:04
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Un solo comentario (aunque sea de SQL). Si lo que necesitas es SOLO el numero total de comentarios que tiene una noticia:
Código PHP:
$consulta=mysql_query("SELECT COUNT(*) AS total_comentarios FROM comentarios WHERE idnoticia='$idnoticia'"); 
Traducido al castellano: "contar cuantos registros de comentarios tienen el campo idnoticia con el valor $idnoticia".

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 10/04/2003, 15:55
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 892
Antigüedad: 15 años, 10 meses
Puntos: 3
Josemi:

Te cuento.. probe tu linea como me la diste.. pero no funciona.. es decir no marca nada de nada de numeros.


Tu la diste asi:

$consulta=mysql_query("SELECT COUNT(*) AS total_comentarios FROM comentarios WHERE idnoticia='$idnoticia'");

Ok supongo que dbee de ser asi:

$consulta=mysql_query("SELECT COUNT(*) AS total_comentarios FROM comentarios WHERE idnoticia='$id'");

Debido a que el idnoticia de la tabla comentarios debe de coincidir con el id de la tabla diario.

Despues intente sacar el resultado como decia Cluster arriba:

Código PHP:
        echo "<TR><td><font face=\"Verdana\" size=\"1\"><b><p align=\"right\"><a class=\"links\" href=\"javascript:popUp('diario/ver_comentario.php?id=".$row["id"]."')\">Coment ".$row["total_comentarios"]."</a></b></p></font></td></TR>"
ACTUALIZADO!

Je.. ahora entendi queno mostraba nada por que en el $result=mysql_query($sql,$contar,$connection); no estaba contando la varible $contar.

De todas formas siue macando error... todos los mysql_query los tengo aqui:

Código PHP:
$sql="SELECT * FROM diario ORDER BY id DESC LIMIT ".$n.", 10 ";
$contar="SELECT COUNT(*) AS total_comentarios FROM comentarios, WHERE idnoticia='$id'"
y el result es el de arriba.. y ahoira amrca error en la linea 170 que es la que contiene la varible $result y en l linea 173 que contiene el while:

while($row = mysql_fetch_array($result))

Creo que ya me hice mas bolas de las que era necesario...
__________________
Equívocos sin importancia

Última edición por Threepwood; 10/04/2003 a las 15:58
  #7 (permalink)  
Antiguo 10/04/2003, 16:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Eso no puedes hacerlo:
$result=mysql_query($sql,$contar,$connection);

Como mucho:

Código PHP:
$result=mysql_query($sql,$connection); 
$result2=mysql_query($contar,$connection); 

$total_comentarios=mysql_result($result2,"total_comentarios",0); 
En $total_comentarios tendras tu total q lo obtienes haciendo esa consulta de SQL $contar ...

Y en $result tienes la otra consulta q la recorres con tu While() ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 10/04/2003, 16:08
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Bueno, yo te puse $idnoticia porque es lo que habias puesto en tu primer codigo. $idnoticia es una variable PHP a la que en algun lugar del script le asignas el valor del id de noticia del que quieres mostrar el numero de comentarios. SOLO te devuelve el de UNA sola noticia.

Segundo, ¿has leido en el manual la sintaxis de mysql_query()? SOLO puede ejecutar una consulta cada vez. Tal como lo estas poniendo estas generando un error de sintaxis. Ademas, estas cambiando la definicion de tu problema. Ya no es "contar el numero de comentarios de una noticia". Ahora es "mostrar todas las noticias con su correspondiente numero de comentarios", que es bastante distinto. Como supongo que ya tenias funcionando el codigo que mostraba las noticias, te sera mas facil modificarlo para realizar la consulta que te di dentro del bucle (while) donde muestras la info de la noticia. Solo tendrias que asignar a $idnoticia el $row['id'].

La otra opcion seria juntar ambas consultas en una sola con join y group by. Sobre esta ultima solucion sera mejor que preguntes en el foro de Base de datos.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 10/04/2003, 16:11
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 892
Antigüedad: 15 años, 10 meses
Puntos: 3
Ah funcionado!

Gracias Cluster y Josemi!
__________________
Equívocos sin importancia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:40.