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

LEFT JOIN y COUNT

Estas en el tema de LEFT JOIN y COUNT en el foro de Mysql en Foros del Web. Hola a todos, Explicaré mi situación lo mejor posible a ver si pueden ayudarme en esta consulta SQL. Tengo 2 tablas. Una de usuarios, y ...
  #1 (permalink)  
Antiguo 11/08/2006, 08:50
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
LEFT JOIN y COUNT

Hola a todos,

Explicaré mi situación lo mejor posible a ver si pueden ayudarme en esta consulta SQL. Tengo 2 tablas. Una de usuarios, y otra de acciones:

Código PHP:
USUARIOS
+--------+--------+
id     nombre |
+--------+--------+
1      pepe   |
2      luis   |
3      marta  |
4      daniel |
+--------+--------+

COMENTARIOS
+--------+--------+--------+
id     usr_id coment |
+--------+--------+--------+
1      2      xxxxx  |
2      2      yyyyy  |
3      1      zzzzz  |
4      3      ooooo  |
+--------+--------+--------+ 
Quiero obtener en otra columna la cantidad total del comentarios que ha hecho un usuario, asi:

Código PHP:
+--------+--------+---------+
id     nombre |total_com|
+--------+--------+---------+
1      pepe   |   1     |
2      luis   |   2     |
3      marta  |   1     |
4      daniel |   0     |
+--------+--------+---------+ 
Mi consulta actual es esta pero NO me devuelve cero para los usuarios que no han emitido comentarios.

Código PHP:
SELECT usuarios.*, COUNT(*) AS total_com
FROM usuarios
LEFT JOIN comentarios
ON usuarios
.id=comentarios.usr_id
GROUP BY usuarios
.id 
¿Me ayudan a pulir mi consulta? Gracias de antemano!
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #2 (permalink)  
Antiguo 11/08/2006, 09:09
 
Fecha de Ingreso: junio-2006
Mensajes: 87
Antigüedad: 17 años, 9 meses
Puntos: 0
Al hacer el left join y el count , siempre te estara contando como minimo uno, que es el registro del usuario que te devuelve.

Prueba a hacer algo asi:

Código:
SELECT usuarios.id,usuarios.nombre, 
sum(IF (comentarios.id is null ,0,1))  AS total_com
FROM usuarios
LEFT JOIN comentarios
ON usuarios.id=comentarios.usr_id
GROUP BY usuarios.id,usuarios.nombre
  #3 (permalink)  
Antiguo 11/08/2006, 09:15
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SUM( IF(comentarios.id IS NULL , 0 , 1 ) ) AS total_com F
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #4 (permalink)  
Antiguo 11/08/2006, 09:28
 
Fecha de Ingreso: junio-2006
Mensajes: 87
Antigüedad: 17 años, 9 meses
Puntos: 0
SUM( case comentarios.id
when NULL THEN 0
ELSE 1
end )
) AS total_com

Prueba con el case a ver si hay suerte...
  #5 (permalink)  
Antiguo 11/08/2006, 09:35
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
No, sigue dando error en el SUM.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #6 (permalink)  
Antiguo 11/08/2006, 09:42
 
Fecha de Ingreso: junio-2006
Mensajes: 87
Antigüedad: 17 años, 9 meses
Puntos: 0
MySQL no dejara hacer la condicion dentro del Sum (yo lo habia probado esto en Oracle)

Lo puedes hacer con una subconsulta si tu version de MySQL soporta estas, o con una funcion...
  #7 (permalink)  
Antiguo 11/08/2006, 10:24
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 19 años, 7 meses
Puntos: 5
Logré hacerlo, solo para referencia futura el único error que tenía mi consulta era el COUNT(*) que debía ser COUNT(usr_id).

Espero que sirva de ayuda.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
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 22:11.