Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/06/2013, 10:56
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 cruzada de 4 tablas

Hola lynxstyle:

¿Cuál es el problema? ¿por qué dices que te pierdes en la consulta? También tendrías que comentarnos si lo que pretendes es obtener en una sola consulta toda la información que vas a mostrar... no sé con qué herramienta vas a generar el PDF, pero es posible que puedas utilizar varias consultas para generar toda la información que necesitas.

Si la idea es obtener toda la información con una sola consulta, es posible que tengas información duplicada, imagina el siguiente ejemplo:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM clientes;
  2. +-----------+---------------+
  3. | idCliente | nombreCliente |
  4. +-----------+---------------+
  5. |         1 | uno           |
  6. |         2 | dos           |
  7. |         3 | tres          |
  8. +-----------+---------------+
  9. 3 rows in set (0.32 sec)
  10.  
  11. mysql> SELECT * FROM pedidos;
  12. +----------+-----------+-------------+
  13. | idPedido | idCliente | fechaCompra |
  14. +----------+-----------+-------------+
  15. |        1 |         1 | 2013-04-14  |
  16. |        2 |         2 | 2013-05-30  |
  17. |        3 |         2 | 2013-06-05  |
  18. |        4 |         1 | 2013-06-10  |
  19. |        5 |         1 | 2013-06-04  |
  20. +----------+-----------+-------------+
  21. 5 rows in set (0.00 sec)
  22.  
  23. mysql> SELECT * FROM detalle_pedidos;
  24. +-----------------+----------+-------------------+----------+
  25. | idDetallePedido | idPEdido | producto          | cantidad |
  26. +-----------------+----------+-------------------+----------+
  27. |               1 |        1 | producto uno.1    |        1 |
  28. |               2 |        1 | producto uno.2    |        2 |
  29. |               3 |        2 | producto dos.1    |        3 |
  30. |               4 |        3 | producto tres.1   |        6 |
  31. |               5 |        4 | producto cuatro.1 |        7 |
  32. |               6 |        5 | producto cinco.1  |        2 |
  33. |               7 |        5 | producto cinco.2  |        1 |
  34. +-----------------+----------+-------------------+----------+
  35. 7 rows in set (0.00 sec)
  36.  
  37. mysql> SELECT c.*, p.fechaCompra, dp.producto, dp.cantidad
  38.     -> FROM clientes c
  39.     -> INNER JOIN pedidos p ON c.idCliente = p.idCliente
  40.     -> INNER JOIN detalle_pedidos dp ON dp.idPedido = p.idPedido
  41.     -> ORDER BY c.idCliente, p.fechaCompra, dp.producto;
  42. +-----------+---------------+-------------+-------------------+----------+
  43. | idCliente | nombreCliente | fechaCompra | producto          | cantidad |
  44. +-----------+---------------+-------------+-------------------+----------+
  45. |         1 | uno           | 2013-04-14  | producto uno.1    |        1 |
  46. |         1 | uno           | 2013-04-14  | producto uno.2    |        2 |
  47. |         1 | uno           | 2013-06-04  | producto cinco.1  |        2 |
  48. |         1 | uno           | 2013-06-04  | producto cinco.2  |        1 |
  49. |         1 | uno           | 2013-06-10  | producto cuatro.1 |        7 |
  50. |         2 | dos           | 2013-05-30  | producto dos.1    |        3 |
  51. |         2 | dos           | 2013-06-05  | producto tres.1   |        6 |
  52. +-----------+---------------+-------------+-------------------+----------+
  53. 7 rows in set (0.00 sec)

Observa que el dato del cliente se repite n veces... esto en realidad para un reporte está de más, pero bueno, esa es cuestión de la lógica que quieras llevar en tu reporte.

Desde mi punto de vista no hay nada extraordinario en la consulta que quieres hacer, simplemente tienes que hacer todos los JOIN's sobre las tablas... No posteas la estructura de tus tablas, ni nos pones tampoco datos de ejemplo por lo que resulta complicado darte una respuesta más puntual.

La idea sería hacer algo como esto:

Código MySQL:
Ver original
  1. ...
  2. FROM ps_customer
  3. INNER JOIN ps_address
  4.   ON ps_address.id_customer=ps_customer.id_customer
  5. INNER JOIN ps_orders  
  6.   ON Aquí pones la relación entre las tablas ps_customer y ps_orders
  7. INNER JOIN ps_order_detail
  8.   ON Aquí pones la relación entre las tablas os_orders y ps_order_detail
  9. ...

Haz la prueba y nos comentas. Si continuas con problemas postea la estructura de tus tablas, pon algunos datos de ejemplo y dinos más cláramente qué es lo que quieres obtener como resultado.

Saludos
Leo.