Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/02/2012, 12: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: ¿ Realizar varios select a la vez ?

Hola davidj:

No mencionas en tu post si las tablas tienen algún tipo de relación o son independientes... Si las tablas estuvieran relacionadas y esta relación está referida por los parámetros que envías, podrías utilizar JOIN's...

ahora bien, si tus tablas son independientes y no guardan relación, lo único que se me ocurre (si entendí correctamente qué es lo que quieres hacer) sería algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM algo;
  2. +---------+----------+----------+
  3. | id_algo | campo1   | campo2   |
  4. +---------+----------+----------+
  5. |       1 | algo 1.1 | algo 1.2 |
  6. |       2 | algo 2.1 | algo 2.2 |
  7. |       3 | algo 3.1 | algo 3.2 |
  8. +---------+----------+----------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM nose;
  12. +---------+----------+----------+
  13. | id_nose | campo1   | campo2   |
  14. +---------+----------+----------+
  15. |       1 | nose 1.1 | nose 1.2 |
  16. |       2 | nose 2.1 | nose 2.2 |
  17. |       3 | nose 3.1 | nose 3.2 |
  18. +---------+----------+----------+
  19. 3 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT * FROM varios;
  22. +-----------+------------+------------+
  23. | id_varios | campo1     | campo2     |
  24. +-----------+------------+------------+
  25. |         1 | varios 1.1 | varios 1.2 |
  26. |         2 | varios 2.1 | varios 2.2 |
  27. |         3 | varios 3.1 | varios 3.2 |
  28. +-----------+------------+------------+
  29. 3 rows in set (0.00 sec)
  30.  
  31. mysql> SET @id_algo = 1;
  32. Query OK, 0 rows affected (0.00 sec)
  33.  
  34. mysql> SET @id_nose = 2;
  35. Query OK, 0 rows affected (0.00 sec)
  36.  
  37. mysql> SET @id_varios = 3;
  38. Query OK, 0 rows affected (0.00 sec)
  39.  
  40. mysql> SELECT
  41.     -> (SELECT campo1 FROM algo WHERE id_algo = @id_algo) columna1_algo,
  42.     -> (SELECT campo1 FROM nose WHERE id_nose = @id_nose) columna1_nose,
  43.     -> (SELECT campo1 FROM varios WHERE id_varios = @id_varios) columna1_varios;
  44.  
  45. +---------------+---------------+-----------------+
  46. | columna1_algo | columna1_nose | columna1_varios |
  47. +---------------+---------------+-----------------+
  48. | algo 1.1      | nose 2.1      | varios 3.1      |
  49. +---------------+---------------+-----------------+
  50. 1 row in set (0.01 sec)
  51.  
  52. mysql> SELECT campo1 FROM algo WHERE id_algo = @id_algo
  53.     -> UNION
  54.     -> SELECT campo1 FROM nose WHERE id_nose = @id_nose
  55.     -> UNION
  56.     -> SELECT campo1 FROM varios WHERE id_varios = @id_varios;
  57. +------------+
  58. | campo1     |
  59. +------------+
  60. | algo 1.1   |
  61. | nose 2.1   |
  62. | varios 3.1 |
  63. +------------+
  64. 3 rows in set (0.06 sec)

La Opción 1 te regresaría un sólo registro con tres columnas, donde cada columna representa el valor del campo 1 de cada tabla.

La Opción 2 utiliza UNION para regresar tres registros con una sola columna, es básicamente lo mismo que estás haciendo, pero al hacer UNION sólo haces una llamada a la BD. Sin embargo, no estoy seguro que cualquiera de estas opciones sea más eficiente que hacerlo por separado...

Saludos
Leo.