Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Unir una consulta COUNT a otra tabla

Estas en el tema de Unir una consulta COUNT a otra tabla en el foro de Mysql en Foros del Web. Hola a todos. Tengo dos tablas. Una se llama noticias y la otra comentarios. Quisiera realizar una consulta en la que me salgan los datos ...
  #1 (permalink)  
Antiguo 28/04/2012, 07:22
 
Fecha de Ingreso: abril-2009
Ubicación: Barcelona
Mensajes: 113
Antigüedad: 15 años
Puntos: 9
Pregunta Unir una consulta COUNT a otra tabla

Hola a todos.

Tengo dos tablas. Una se llama noticias y la otra comentarios.

Quisiera realizar una consulta en la que me salgan los datos de la tabla noticias y el número de comentarios de cada noticia.

Lógicamente como es normal cada entrada de la tabla comentarios guarda la id de la tabla noticias.

Por ejemplo si realizo la consulta:
Código MySQL:
Ver original
  1. SELECT COUNT(idcomentarios) FROM comentarios group by idcomentarios

Me muestra el número de veces que un mismo id se repite.

Bueno pues me gustaría poder unir esa consulta a la típica

Código MySQL:
Ver original
  1. SELECT * FROM noticias

En la que por cada id de noticias se referencia el COUNT de la otra consulta.

Creo que se hace con inner join, pero no logro aclararme...
  #2 (permalink)  
Antiguo 28/04/2012, 09:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Unir una consulta COUNT a otra tabla

No, para eso mejor usas LEFT JOIN, pues alguna noticia no tendrá comentario. A ver si así (no lo he probado). Observa que te pongo los nombres de los campos de la noticia. No uses * salvo que se trate de todos los campos de noticias.

SELECT n.idnoticias, n.campo1, n.campo2, n.campo3, n.campo4, IFNULL(COUNT(c.idcomentarios), 0) numcomentarios FROM noticias n LEFT JOIN comentarios c ON n.idnoticias = c.idnoticias GROUP BY n.idnoticias
  #3 (permalink)  
Antiguo 28/04/2012, 09:16
 
Fecha de Ingreso: abril-2009
Ubicación: Barcelona
Mensajes: 113
Antigüedad: 15 años
Puntos: 9
Respuesta: Unir una consulta COUNT a otra tabla

Hola jurena.

He probado lo que me has puesto y me da error. De todas formas si que me interesa saber si una noticia tiene o no tiene comentarios ya que en función de ese datos posteriormente construyo una tabla con php.

La verdad es que tampoco tengo muy claro las partes donde pones 'n' o 'c' ¿Son alias o algo así?

Perdona mi desconocimiento de mySQl más allá de simples consultas...
  #4 (permalink)  
Antiguo 28/04/2012, 12:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Unir una consulta COUNT a otra tabla

sí, son alias, y no tienes que disculparte.
Dinos qué error te da. Danos también los nombres exactos de los campos de las tablas y ponnos algún ejemplo concreto de cómo tienes guardados los datos en las dos tablas.
  #5 (permalink)  
Antiguo 28/04/2012, 13:03
 
Fecha de Ingreso: abril-2009
Ubicación: Barcelona
Mensajes: 113
Antigüedad: 15 años
Puntos: 9
Respuesta: Unir una consulta COUNT a otra tabla

Mis tablas son las siguiente

noticias:
idnoticia | titulo | cuerpo | fecha

comentarios:
idcomentario | autor | cuerpo | fecha |idnoticia

Veamos buscando y rebuscando un poco he logrado el siguiente código:

Código MySQL:
Ver original
  1. SELECT `noticias`.`idnoticia`, `noticias`.`titulo`, COUNT(`comentarios`.`idcomentario`) AS `cuenta`
  2. FROM `comentarios`, `noticias`
  3. WHERE `noticias`.`idnoticia` = `comentarios`.`idnoticia`
  4. GROUP BY `comentario`.`idnoticia`

De esta manera logro por ejemplo que me muestre el id de la noticia, el titulo y en la columna cuenta la cantidad de veces que se ha comentado. Sin embargo, solo me muestra aquellas noticias que tienen comentarios. Si una noticia no tiene ningún comentario no me la muestra, y a mi me interesa que me muestre todas noticias. Digamos que algo así.

idnoticia | titulo | cuenta
1 | titulo1 | 5
2 | titulo2 | 3
3 | titulo3 | 0 ( o simplemente que no muestre nada)
4 | titulo4 | 1
etc...

Según la consulta que tengo me mostraría todos menos el titulo3, pero yo también quiero que se muestre...

No se si es posible o no la verdad...

Última edición por navegantes; 28/04/2012 a las 13:11
  #6 (permalink)  
Antiguo 29/04/2012, 15:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Unir una consulta COUNT a otra tabla

¿Y así?
SELECT `noticias`.`idnoticia`, `noticias`.`titulo`, IFNULL(COUNT(`comentarios`.`idcomentario`),'0') AS `cuenta`
FROM `noticias` LEFT JOIN `comentarios`
ON `noticias`.`idnoticia` = `comentarios`.`idnoticia`
GROUP BY `noticias`.`idnoticia`
  #7 (permalink)  
Antiguo 29/04/2012, 21:00
 
Fecha de Ingreso: junio-2010
Mensajes: 18
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Unir una consulta COUNT a otra tabla

Cita:
Iniciado por jurena Ver Mensaje
¿Y así?
SELECT `noticias`.`idnoticia`, `noticias`.`titulo`, IFNULL(COUNT(`comentarios`.`idcomentario`),'0') AS `cuenta`
FROM `noticias` LEFT JOIN `comentarios`
ON `noticias`.`idnoticia` = `comentarios`.`idnoticia`
GROUP BY `noticias`.`idnoticia`
Muchas gracias, hace un ratito hice un tema preguntando lo mismo, y esto me vino de 10!
  #8 (permalink)  
Antiguo 30/04/2012, 01:59
 
Fecha de Ingreso: abril-2009
Ubicación: Barcelona
Mensajes: 113
Antigüedad: 15 años
Puntos: 9
Respuesta: Unir una consulta COUNT a otra tabla

Cita:
Iniciado por jurena Ver Mensaje
¿Y así?
SELECT `noticias`.`idnoticia`, `noticias`.`titulo`, IFNULL(COUNT(`comentarios`.`idcomentario`),'0') AS `cuenta`
FROM `noticias` LEFT JOIN `comentarios`
ON `noticias`.`idnoticia` = `comentarios`.`idnoticia`
GROUP BY `noticias`.`idnoticia`
Pues jurena te puedo decir que ha funcionado de maravilla y a la primera.

De mi propia cosecha he logrado meter un LEFT(titulo,30) AS titulo y también ha funcionado así que por el momento hoy estoy contentísimo

Etiquetas: count, join, select, tabla
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 01:09.