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

Ayuda, contando "comentarios"

Estas en el tema de Ayuda, contando "comentarios" en el foro de Mysql en Foros del Web. Hola, Estoy optimizando el código de mi página (en PHP) y reduciendo el número de consultas que hago a la BBDD. Pero me encuentro con ...
  #1 (permalink)  
Antiguo 22/10/2009, 09:59
 
Fecha de Ingreso: octubre-2003
Ubicación: FMSite
Mensajes: 336
Antigüedad: 20 años, 6 meses
Puntos: 2
Ayuda, contando "comentarios"

Hola,

Estoy optimizando el código de mi página (en PHP) y reduciendo el número de consultas que hago a la BBDD.

Pero me encuentro con un problema, os situo:

Tengo una tabla de guías con su correspondiente ID y título.
Tengo otra tabla de comentarios, cada comentario tiene un noti_id que se relaciona con la ID de la guía.

Y lo que quiero es que por cada guía me muestre el número de comentarios que hay. Lo que pasa es que si el numero de comentarios es 0 no lo muestra y supongo que será por el INNER JOIN que había hecho. Así que probé con un LEFT OUTER JOIN (que no sé si funciona bien porque me hace lo mismo que el INNER).

La consulta que ejecuto es la siguiente:

Código:
SELECT g.titulo as titulo, g.visit as visit, g.autor as autor, g.tipo as tipo, g.id as id, count(noti_id) as Ncomentarios
FROM guias as g LEFT OUTER JOIN cm4anotiscom as c ON g.id = c.noti_id
WHERE g.tags LIKE '%".$juego."%' AND g.veri='ok' AND g.tipo=$tipo AND c.cat='guia'
GROUP BY g.id
ORDER BY g.titulo
Éste código me muestra todas las guías que tienen nº comentarios > 0. Cómo puedo hacer que muestre también las guías que no tengan comentarios?

Saludos y gracias!
__________________
http://www.fmsite.net/
  #2 (permalink)  
Antiguo 22/10/2009, 10:26
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: Ayuda, contando "comentarios"

Cambia la consulta para que tambien te traiga los resultados donde c.cat sea null. Con esto te devolvera tambien las guias sin comentarios (ya que en esttos casos, en la consulta los campos correspondientes a la tabla de comentarios devuelve null)
  #3 (permalink)  
Antiguo 22/10/2009, 10:33
 
Fecha de Ingreso: octubre-2003
Ubicación: FMSite
Mensajes: 336
Antigüedad: 20 años, 6 meses
Puntos: 2
Respuesta: Ayuda, contando "comentarios"

Hola darkasecas,

Gracias por tu respuesta.
Se me olvidó comentarlo: en la tabla de comentarios tengo comentarios tanto para guías, como para noticias, descargas, jugadores... y la forma de identificar que ese comentario es de guía es mirando la columna c.cat y verificando que es "guia". Así que creo que lo que me propones no es correcto después de mi explicación, no?

A ver si explicando esto podéis ayudarme :)

Saludos!
__________________
http://www.fmsite.net/
  #4 (permalink)  
Antiguo 24/10/2009, 09:08
 
Fecha de Ingreso: octubre-2003
Ubicación: FMSite
Mensajes: 336
Antigüedad: 20 años, 6 meses
Puntos: 2
Respuesta: Ayuda, contando "comentarios"

Alguna idea, por favor?

Saludos!
__________________
http://www.fmsite.net/
  #5 (permalink)  
Antiguo 24/10/2009, 09:22
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: Ayuda, contando "comentarios"

En lugar de hacer join con la tabla de comentarios, hacer un join con una subconsulta de la tabla de comentarios que te traiga solo los comentarios que son de guias? Algo asi

SELECT * FROM tabla1 a
LEFT JOIN (SELECT * FROM tabla2 WHERE campo = 'valor') b ON a.id = b.tabla1_id
  #6 (permalink)  
Antiguo 24/10/2009, 09:38
 
Fecha de Ingreso: octubre-2003
Ubicación: FMSite
Mensajes: 336
Antigüedad: 20 años, 6 meses
Puntos: 2
Respuesta: Ayuda, contando "comentarios"

GRACIAS! con eso se solucionó! Aunque, sinceramente, no entiendo la diferencia entre ponerlo como una subconsulta a ponerlo como lo tenía yo... no sé por qué antes no lo hacía :S

Un saludo!
__________________
http://www.fmsite.net/
  #7 (permalink)  
Antiguo 24/10/2009, 13:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayuda, contando "comentarios"

Cita:
no entiendo la diferencia entre ponerlo como una subconsulta a ponerlo como lo tenía yo...
En el modo en que tu lo hacías, el pimer INNER JOIN tomaba todos los registros coincidentes de la tabla2, incluidos aquellos en que el tabla2.campo = "valor" no se cumplía, antes de eliminarlos. Como esto podía implicar muchos muchos registros, perdía tiempo inútilmente leyendo información que luego no iba a usar.
Al poner ese primer filtro como subconsulta, se eliminan de entrada todos aquellos registros que seguro no vas a usar, y se hace la selección fina sobre una tabla mucho más reducida. Esa tarea es inmensamente rápida.
En MySQL, LEFT OUTER JOIN es sinónimo de LEFT JOIN, y te devuelve todos los registros de la tabla izquierda del FROM, no hace el mismo filtrado que MSSQL Server u Oracle. Tenlo en cuenta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 17:13.