Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

¿ Realizar varios select a la vez ?

Estas en el tema de ¿ Realizar varios select a la vez ? en el foro de Mysql en Foros del Web. Hola a todos!! Mirad, tengo tres tablas (es un ejemplo): TABLA "ALGO" - id_algo - campo1 - campo2 TABLA "NOSE" - id_nose - campo1 - ...
  #1 (permalink)  
Antiguo 24/02/2012, 11:55
 
Fecha de Ingreso: octubre-2003
Ubicación: España
Mensajes: 1.067
Antigüedad: 20 años, 6 meses
Puntos: 18
¿ Realizar varios select a la vez ?

Hola a todos!!

Mirad, tengo tres tablas (es un ejemplo):

TABLA "ALGO"
- id_algo
- campo1
- campo2

TABLA "NOSE"
- id_nose
- campo1
- campo2

TABLA "VARIOS"
- id_varios
- campo1
- campo2

En la página web tengo que pasar por GET los campos "id_algo, id_nose, y id_varios" y recogerlos. Una vez recogidos necesito saber el "campo1" de cada tabla a la que pertenecen los dichos "id" por consiguiente utilizo tres SELECTS:

$cadena=mysql_query("SELECT * FROM algo WHERE id_algo = $id_algo");
$row1 = mysql_fetch_array("cadena");
$cadena=mysql_query("SELECT * FROM nose WHERE id_nose = $id_nose");
$row2 = mysql_fetch_array("cadena");
$cadena=mysql_query("SELECT * FROM varios WHERE id_algo = $id_algo");
$row3 = mysql_fetch_array("cadena");

¿ Existe alguna manera para realizarlo todo en una sola consulta (no tener que realizar tres consultas por separado) e ir más rápido y no consumir tantos recursos ?

Un saludo compañeroos!
  #2 (permalink)  
Antiguo 24/02/2012, 12:19
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 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.
  #3 (permalink)  
Antiguo 24/02/2012, 14:10
 
Fecha de Ingreso: octubre-2003
Ubicación: España
Mensajes: 1.067
Antigüedad: 20 años, 6 meses
Puntos: 18
Respuesta: ¿ Realizar varios select a la vez ?

Muchisimas gracias por tu respuesta, a ver si alguien puede confirmar si este sistema con union es más eficaz que realizar tres consultas...

Un saludo!!!

Etiquetas: query, select, sql, tabla, vez, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:37.