Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/12/2014, 16:19
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: Consulta para mi complicada

Hola tapry:

Cita:
Como te indico estoy muy verde, pero resumiendo y casi estoy seguro que se puede hacer.....

Yo intento sacar el listado de llamadas de un usuario. Hasta ahi es fácil y creo que lo conseguí con una simple Query.
Yo nunca comenté que no se pueda hacer, lo que dije es que puede que no resulte como para obtenerla con una simple Query como comentas. Tal como te mencioné en mi post pasado, puede hacer uso de UNION's, para presentar la información de tus tablas, sin embargo, una de las restricciones de para los UNION's es que deben tener el mismo numero de columnas y estas deben ser del mismo tipo. Imagina el siguiente ejemplo:

Código:
mysql> SELECT * FROM tabla1;
+-------+--------+--------+--------+
| id_t1 | campo1 | campo2 | campo3 |
+-------+--------+--------+--------+
|     1 | uno    | uno    | uno    |
|     2 | dos    | dos    | dos    |
|     3 | tres   | tres   | tres   |
+-------+--------+--------+--------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM tabla2;
+-------+-------+----------+
| id_t2 | id_t1 | campo1   |
+-------+-------+----------+
|     1 |     1 | hijo 1.1 |
|     2 |     1 | hijo 1.2 |
|     3 |     1 | hijo 1.3 |
|     4 |     2 | hijo 2.1 |
|     5 |     2 | hijo 2.2 |
+-------+-------+----------+
5 rows in set (0.00 sec)
Observa que las 1 y 2 están relacionadas por el campo id_t1. Tú lo que pretendes hacer es mostrar la información en una especie de árbol, es decir, presentar el registro padre y después todos sus hijos... el problema con el número de columnas, puedes resolverlo poniendo campos NULL para "completarlos", o algún valor fijo, es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT t1.id_t1, 0 id_t2, t1.campo1, t1.campo2, t1.campo3
  2.     -> FROM tabla1 t1
  3.     -> UNION ALL
  4.     -> SELECT t2.id_t1, t2.id_t2, t2.campo1, NULL campo2, NULL campo3
  5.     -> FROM tabla2 t2
  6.     -> ORDER BY 1, 2;
  7. +-------+-------+----------+--------+--------+
  8. | id_t1 | id_t2 | campo1   | campo2 | campo3 |
  9. +-------+-------+----------+--------+--------+
  10. |     1 |     0 | uno      | uno    | uno    |
  11. |     1 |     1 | hijo 1.1 | NULL   | NULL   |
  12. |     1 |     2 | hijo 1.2 | NULL   | NULL   |
  13. |     1 |     3 | hijo 1.3 | NULL   | NULL   |
  14. |     2 |     0 | dos      | dos    | dos    |
  15. |     2 |     4 | hijo 2.1 | NULL   | NULL   |
  16. |     2 |     5 | hijo 2.2 | NULL   | NULL   |
  17. |     3 |     0 | tres     | tres   | tres   |
  18. +-------+-------+----------+--------+--------+
  19. 8 rows in set (0.00 sec)

entre más diferencia exista entre las dos tablas, más tendrás que "alterar" tus campos a fin de empatar ambas estructuras. pero igual y esto te sirve, insisto en que estás planteando mal el problema al quererlo obtener desde una consulta con SQL, cuando puedes hacerlo bastante simple de manera programática.

Saludos
Leo.

Última edición por gnzsoloyo; 18/12/2014 a las 16:29