Comunidad de diseño web y desarrollo en internet online

Consulta de dos tablas

Citar            
MensajeEscrito el 08 Dic 2008 09:00 pm
Hola a todos estoy realizando un blog con php y Mysql pero me eh topado en lo que es imprimir el numero total de comentarios mis tablas estan asi

Noticias:
idNoticia titulo copete cuerpo idUsuario idCategoria fPublicacion

Comentarios:
idComentario comentario idUsuario email idNoticia estado

El blog en si es chambita.com/test/blog

y lo que quiero es que por ejemplo en la noticia 1 mostrar (X)comentarios y en la noticia 2 sus (X) comentarios

Trate con count() pero me da 2 comentarios por noticia cuando en realidad tengo solo 2 comentarios en la base de datos por fa ayudenme pues este trabajo es valioso para seguir en la chamba...
^^

Por vladis

3 de clabLevel



 

EL Salvador

firefox
Citar            
MensajeEscrito el 08 Dic 2008 09:42 pm
Hola, creo que esto te servirá:

Código :

SELECT Noticias.idNoticia, COUNT(Comentarios.idComentario) 
FROM Noticias, Comentarios 
WHERE Comentarios.idNoticia = Noticias.idNoticia
GROUP BY Noticias.idNoticia
ORDER BY Noticias.idNoticia;

El truco es el GROUP BY, deberias leer al respecto... Saludos...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 08 Dic 2008 09:59 pm

KB-27 escribió:

El truco es el GROUP BY

Bueno, y obvio el JOIN... My Bad..!

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 08 Dic 2008 10:37 pm
Gracias pero no me sale nada... nose porque

Por vladis

3 de clabLevel



 

EL Salvador

firefox
Citar            
MensajeEscrito el 08 Dic 2008 10:50 pm
Verificaste que los nombres de los campos y las tablas estén bien escritos??? Lo otro es que yo trabajo en postgresql, y si mal no recuerdo creo que en postgres se puede obviar la palabra JOIN y en MySQL no... Tendría que revisar...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

msie7
Citar            
MensajeEscrito el 08 Dic 2008 11:04 pm
los nombres los tuve que corregir pero mas que todo el de las tablas y en cuando al postgresql creo que ahi es el detalle pues lo estoy trabajando con php-mysql...

Por vladis

3 de clabLevel



 

EL Salvador

firefox
Citar            
MensajeEscrito el 09 Dic 2008 06:06 am

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 09 Dic 2008 11:47 am

Inyaka escribió:

de echo en este caso ni siquiera es necesaria la consulta cruzada, la cual debe ser echa con INNER (join o left)

podrías simplemente contar los resultados que te entrego la ultima consulta con php http://es.php.net/manual/es/function.mysql-affected-rows.php
Pero creo que lo que quiere vladis es contar la cantidad de comentarios por noticia... podría hacer eso sin cruzar las tablas..?

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

msie7
Citar            
MensajeEscrito el 09 Dic 2008 12:58 pm
si, existe el campo idNoticia, el cual supongo que debe estar en alguna variable, si no fuese asi, y se requiriera contar todos los comentarios de todas las noticias y desplegarlos, seria algo asi

Código :

SELECT COUNT(c.idComentario), n.titulo, n.cuerpo, fPublicacion etc
FROM Noticias n # n va a ser el sobrenombre de Noticias

LEFT JOIN Comentarios c
ON n.idNoticia = c.idNoticia
GROUP BY c.idNoticia


uso left join, por que las noticias pueden tener o no tener comentarios

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 09 Dic 2008 01:11 pm

Inyaka escribió:

si, existe el campo idNoticia, el cual supongo que debe estar en alguna variable,

Ah bueno, en eso si te apoyo, si tuviese idNoticia guardado en alguna variable es mas rápido y fácil la solución que habias dado anteriormente, haría un SELECT donde el idNoticia sea igual al que tiene en la variable y luego contaria las filas afectadas...

Inyaka escribió:

podrías simplemente contar los resultados que te entrego la ultima consulta con php mysql_affected_rows

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 09 Dic 2008 01:20 pm

KB-27 escribió:

la solución que habias dado anteriormente, haría un SELECT donde el idNoticia sea igual al que tiene en la variable y luego contaria las filas afectadas...


no, es por si quería saber el numero de comentarios desplegados en la noticia

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 09 Dic 2008 01:32 pm
Exacto, eso lo entendí, lo que quise decir es que si ese fuese el caso lo podría hacer como habías dicho...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 09 Dic 2008 02:21 pm
vladis no se porque no te funcionó con el SELECT que te dí :cry: lo acabo de probar en MySQL y funciona tal cual lo escribí, lo que hice fue copiar y pegar... Pero bueh... con el LEFT JOIN también sirve
Pd: si, soy necio :D

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 09 Dic 2008 05:05 pm
Gracias Inyaka creo que estamos llegando a algo el problema es que nose como imprimir el numero de comentarios aqui te dejo todo el script para que me lo revises...gracias viejo por tu ayuda no sabes como la agradezco
<?php require_once('config.php');

mysql_select_db($database, $config);
$query_listar = "SELECT COUNT(c.idComentario), n.titulo, n.copete
FROM Noticias n
LEFT JOIN Comentarios c
ON n.idNoticia = c.idNoticia
GROUP BY c.idNoticia";
$listar = mysql_query($query_listar, $config) or die(mysql_error());
$row_listar = mysql_fetch_assoc($listar);
$totalRows_listar = mysql_num_rows($listar);
?>

<? do {?>
<? echo $row_listar['titulo']; ?><br>
<? echo $row_listar['copete']; ?><br>
Comentarios: <?php echo ("$c.idComentario") ?>

Por vladis

3 de clabLevel



 

EL Salvador

firefox
Citar            
MensajeEscrito el 09 Dic 2008 05:23 pm
usa la etiqueta [.code] o [.php] <-si vas a postear codigo php o [.html] si postearas codigo html

ahora si, se me olvido ponerle el alias al COUNT()

Código :

SELECT 
COUNT(c.idComentario) nComentarios, # <-- ATENTO¡¡¡
n.titulo, 
n.cuerpo,
 fPublicacion etc
FROM Noticias n # n va a ser el sobrenombre de Noticias

LEFT JOIN Comentarios c
ON n.idNoticia = c.idNoticia
GROUP BY c.idNoticia

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.