Ver Mensaje Individual
  #8 (permalink)  
Antiguo 06/12/2012, 03:55
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: 17 años, 4 meses
Puntos: 2658
Respuesta: Consulta de dos tablas se me atraganta

Vamos a ver si se entiende y queda claro que lo que hace el LEFT JOIN es precisamente mosrtar las cosas como tu quieres, por lo que resulta difícil comprender cuál es tu problema...
Supongamos que tenemos estas dos tablas:
Código MySQL:
Ver original
  1. mysql> SELECT *
  2.     -> FROM posts;
  3. +----------+------+
  4. | id_posts | post |
  5. +----------+------+
  6. |        1 | post |
  7. |        2 | post |
  8. |        3 | post |
  9. |        4 | post |
  10. |        5 | post |
  11. |        6 | post |
  12. +----------+------+
  13. 6 rows in set (0.01 sec)
  14.  
  15. mysql> SELECT *
  16.     -> FROM comentarios;
  17. +----------------+----------+------------+
  18. | id_comentarios | id_posts | comentario |
  19. +----------------+----------+------------+
  20. |              1 |        2 | comentario |
  21. |              2 |        2 | comentario |
  22. |              3 |        3 | comentario |
  23. |              4 |        5 | comentario |
  24. |              5 |        4 | comentario |
  25. +----------------+----------+------------+
  26. 5 rows in set (0.00 sec)
SI yo hago un LEFT JOIN entre ambas, obtengo:
Código MySQL:
Ver original
  1. mysql> SELECT *
  2.     -> FROM posts P LEFT JOIN comentarios C ON P.id_posts = C.id_posts;
  3. +----------+------+----------------+----------+------------+
  4. | id_posts | post | id_comentarios | id_posts | comentario |
  5. +----------+------+----------------+----------+------------+
  6. |        1 | post |           NULL |     NULL | NULL       |
  7. |        2 | post |              1 |        2 | comentario |
  8. |        2 | post |              2 |        2 | comentario |
  9. |        3 | post |              3 |        3 | comentario |
  10. |        4 | post |              5 |        4 | comentario |
  11. |        5 | post |              4 |        5 | comentario |
  12. |        6 | post |           NULL |     NULL | NULL       |
  13. +----------+------+----------------+----------+------------+
  14. 7 rows in set (0.00 sec)
Como puedes ver, los ID de los posts en la primera tabla salieron todos, sin excepciones. Lo único que sale NULL es aquella columna de la segunda tabla donde no hay comentarios relacionados, lo que incluye el id_posts de esa tabla, pero eso es normal.
Si quiero evitar que esa columna me traiga problemas, simplemente tengo que invocarlas una a una:
Código MySQL:
Ver original
  1. mysql> SELECT P.id_posts, P.post, C.id_comentarios, C.comentario
  2.     -> FROM posts P LEFT JOIN comentarios C ON P.id_posts = C.id_posts;
  3. +----------+------+----------------+------------+
  4. | id_posts | post | id_comentarios | comentario |
  5. +----------+------+----------------+------------+
  6. |        1 | post |           NULL | NULL       |
  7. |        2 | post |              1 | comentario |
  8. |        2 | post |              2 | comentario |
  9. |        3 | post |              3 | comentario |
  10. |        4 | post |              5 | comentario |
  11. |        5 | post |              4 | comentario |
  12. |        6 | post |           NULL | NULL       |
  13. +----------+------+----------------+------------+
  14. 7 rows in set (0.02 sec)
Ahora bien, hay dos cosas a considerar:
1) En el LEFT JOIN el orden de las tablas si altera el producto. En tu caso debes poner siempre la tabla que contiene los posts a la izquierda, puesto que si las inviertes el resultado es completamente distinto:
Código MySQL:
Ver original
  1. mysql> SELECT *
  2.     -> FROM comentarios C LEFT JOIN posts P ON P.id_posts = C.id_posts;
  3. +----------------+----------+------------+----------+------+
  4. | id_comentarios | id_posts | comentario | id_posts | post |
  5. +----------------+----------+------------+----------+------+
  6. |              1 |        2 | comentario |        2 | post |
  7. |              2 |        2 | comentario |        2 | post |
  8. |              3 |        3 | comentario |        3 | post |
  9. |              4 |        5 | comentario |        5 | post |
  10. |              5 |        4 | comentario |        4 | post |
  11. +----------------+----------+------------+----------+------+
  12. 5 rows in set (0.00 sec)

2) No sabemos qué es lo que evalúa esto:
Código MySQL:
Ver original
  1. postwou.object_id=$object_id
y esa condición afecta el resultado completo, pudiendo evitar que ciertos registros salgan en el resultado. Podría ser esa la causa de tu problema, pero desde nuesrta óptica, es imposible de saber (no es nuestra base, ni son nuestros datos).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)