Ver Mensaje Individual
  #5 (permalink)  
Antiguo 15/10/2012, 13:20
Avatar de gnzsoloyo
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: Mostrar 0 si no hay resultados

Neodani:
Hay que tener bastante cuidado cuando se realizan consultas entre tablas de relaciones N:N, especialmente cuando la relación no es mandatoria (obligatoria), porque los resultados finales dependen del orden de las tablas y de los INNER y LEFT.
Cuando usas una relación así, la primer tabla tiene que ser siempre aquella donde siempre existirán datos (la que es tabla origen o padre), porque es sobre ella donde se apoyará el resultado.
Luego debes vincular esa tabla con la tabla relacional, pero siempre con LEFT JOIN, ya que en la segunda puede que existan o no registros vinculados.
La tercer tabla se debe hacer siempre por INNER JOIN (salvo algún caso excepcional), porque sólo relacionará lo que esté vinculado con la primer tabla y no sea NULL en la segunda.
Acuérdate siempre que en un JOIN, los campos NULL no se pueden igualar. Y nop pueden igualarse porque NULL no es un dato que exista, sino un estado de indeterminación. Es la nada y por lógica, significa que no existe un registro... por ende no devuelve registros.
En el caso del COUNT() aplicado a tu ejemplo, el COUNT se debe hacer sobre el campo vinculado de la tercera tabla, porque COUNT() sólo cuenta datos reales y no cuenta NULLs. Si lo aplicaras contra el id del usuario de la primera tabla, siempre devolvería al menos un uno (1).

¿Se entiende la lógica del asunto?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)