Ver Mensaje Individual
  #2 (permalink)  
Antiguo 31/10/2011, 09:30
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Intercalar resultados de consultas a mysql o usar php

Hola srnetworks:

Tal como lo infieres correctamente, una opción sería utilizar UNION para unir las dos tablas, sin embargo olvidaste mencionarnos cuál es la estructura de tus tablas, para poder darte un ejemplo más cercano a tu realidad. Sin embargo creo que este script podría servirte:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE TablaUsuarios (idUsuario INT, nombre VARCHAR(15));
  2. Query OK, 0 rows affected (0.14 sec)
  3. mysql> INSERT INTO TablaUsuarios VALUES (1, 'Juan');
  4. Query OK, 1 row affected (0.03 sec)
  5. mysql> SELECT * FROM TablaUsuarios;
  6. +-----------+--------+
  7. | idUsuario | nombre |
  8. +-----------+--------+
  9. |         1 | Juan   |
  10. +-----------+--------+
  11. 1 row in set (0.00 sec)
  12. mysql> CREATE TABLE TablaPosts (idPost INT, idUsuario INT,
  13.     -> descripcion VARCHAR(20), fecha DATETIME);
  14. Query OK, 0 rows affected (0.09 sec)
  15. mysql> INSERT INTO TablaPosts VALUES
  16.     -> (1, 1, 'Prueba 1', '2011-10-30 14:33:21'),
  17.     -> (2, 1, 'Prueba 2', '2011-10-31 09:21:32');
  18. Query OK, 2 rows affected (0.03 sec)
  19. Records: 2  Duplicates: 0  Warnings: 0
  20. mysql> SELECT * FROM TablaPosts;
  21. +--------+-----------+-------------+---------------------+
  22. | idPost | idUsuario | descripcion | fecha               |
  23. +--------+-----------+-------------+---------------------+
  24. |      1 |         1 | Prueba 1    | 2011-10-30 14:33:21 |
  25. |      2 |         1 | Prueba 2    | 2011-10-31 09:21:32 |
  26. +--------+-----------+-------------+---------------------+
  27. 2 rows in set (0.00 sec)
  28. mysql> CREATE TABLE TablaComentarios (idComentario INT,
  29.     -> idUsuario INT, idPost INT, descripcion VARCHAR(40),
  30.     -> fecha DATETIME);
  31. Query OK, 0 rows affected (0.11 sec)
  32. mysql> INSERT INTO TablaComentarios VALUES
  33.     -> (1, 1, 1, 'Comentario 1 del Post 1', '2011-10-30 14:35:32'),
  34.     -> (2, 1, 1, 'Comentario 2 del Post 1', '2011-10-31 10:45:41'),
  35.     -> (3, 1, 2, 'Comentario 1 del Post 2', '2011-10-31 10:48:09');
  36. Query OK, 3 rows affected (0.03 sec)
  37. Records: 3  Duplicates: 0  Warnings: 0
  38. mysql> SELECT TP.fecha,
  39.     -> CONCAT(Tu.nombre, ' creó el post ', TP.descripcion) descripcion
  40.     -> FROM TablaUsuarios TU INNER JOIN TablaPosts TP ON
  41.     -> TU.idUsuario = TP.idUsuario
  42.     -> UNION ALL
  43.     -> SELECT TC.fecha,
  44.     -> CONCAT(Tu.nombre, ' comentó el post ', TP.descripcion) descripcion
  45.     -> FROM TablaUsuarios TU
  46.     -> INNER JOIN TablaPosts TP ON TU.idUsuario = TP.idUsuario
  47.     -> INNER JOIN TablaComentarios TC ON
  48.     -> TU.idUsuario = TC.idUsuario
  49.     -> AND TP.idPost = TC.idPost
  50.     -> ORDER BY 1;
  51. +---------------------+-------------------------------+
  52. | fecha               | descripcion                   |
  53. +---------------------+-------------------------------+
  54. | 2011-10-30 14:33:21 | Juan creó el post Prueba 1    |
  55. | 2011-10-30 14:35:32 | Juan comentó el post Prueba 1 |
  56. | 2011-10-31 09:21:32 | Juan creó el post Prueba 2    |
  57. | 2011-10-31 10:45:41 | Juan comentó el post Prueba 1 |
  58. | 2011-10-31 10:48:09 | Juan comentó el post Prueba 2 |
  59. +---------------------+-------------------------------+
  60. 5 rows in set (0.01 sec)

Observa que la última consulta está compuesta de dos subconsultas... son prácticamente iguales, pero en la segunda se hacen los JOINS sobre las tres tablas. Observa también que en la primer subconsulta se toma la fecha de la tabla de Posts (SELECT TP.fecha) mientras que en la segunda subconsulta se toma la fecha de la tabla de comentarios (SELECT TC.fecha). Finalmente, la intercalación se da al ordenar los registros por fecha...

En los datos de ejemplo pongo a propósito un comentario del post1 en una fecha posterior al día de creación... si quisieras mostrar todos los mensajes referentes a un post, tendrías que hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT TP.fecha, TP.idPost,
  2.     -> CONCAT(Tu.nombre, ' creó el post ', TP.descripcion) descripcion
  3.     -> FROM TablaUsuarios TU INNER JOIN TablaPosts TP ON
  4.     -> TU.idUsuario = TP.idUsuario
  5.     -> UNION ALL
  6.     -> SELECT TC.fecha, TP.idPost,
  7.     -> CONCAT(Tu.nombre, ' comentó el post ', TP.descripcion) descripcion
  8.     -> FROM TablaUsuarios TU
  9.     -> INNER JOIN TablaPosts TP ON TU.idUsuario = TP.idUsuario
  10.     -> INNER JOIN TablaComentarios TC ON
  11.     -> TU.idUsuario = TC.idUsuario
  12.     -> AND TP.idPost = TC.idPost
  13.     -> ORDER BY 2,1;
  14. +---------------------+--------+-------------------------------+
  15. | fecha               | idPost | descripcion                   |
  16. +---------------------+--------+-------------------------------+
  17. | 2011-10-30 14:33:21 |      1 | Juan creó el post Prueba 1    |
  18. | 2011-10-30 14:35:32 |      1 | Juan comentó el post Prueba 1 |
  19. | 2011-10-31 10:45:41 |      1 | Juan comentó el post Prueba 1 |
  20. | 2011-10-31 09:21:32 |      2 | Juan creó el post Prueba 2    |
  21. | 2011-10-31 10:48:09 |      2 | Juan comentó el post Prueba 2 |
  22. +---------------------+--------+-------------------------------+
  23. 5 rows in set (0.00 sec)

Dale un vistazo y nos comentas.

Saludos
Leo.