2011-05-04 21 views
5

En PHP, que tienen una serie de 11 personas donde se da sólo el ID de cada persona:MySQL: Join (2 mesas) vs consultas individuales (1 mesa)

$persons = array(1, 3, 39, 72, 17, 20, 102, 99, 77, 2, 982); 

en mi base de datos MySQL , hay una tabla que contiene información detallada sobre cada persona:

TABLE personInfo 
- ID (integer) 
- name (string) 
- birth date (timestamp) 
- weight (decimal) 
- ... 

PROBLEMA:

Así que ahora, quiero seleccione el nombre del juego para cada ID de la matriz PHP. Sólo puedo imaginar dos soluciones de hacer esto:

1. for-loop:

foreach ($persons as $person) { 
    $result = mysql_query("SELECT name FROM personInfo WHERE id = ".$person); 
} 

2. operador lógico O

$result = mysql_query("SELECT name FROM personInfo WHERE id = 1 OR id = 3 OR id = 39 OR ..."); 

Ambos soluciones son lentos, ¿no es así?

Pero si tuviera otra tabla de MySQL que contiene los ID de la matriz PHP ...

TABLE ids 
- ID (integer) 

... Podría utilizar una combinación de hacer una consulta MySQL muy rápido, ¿verdad?

$result = mysql_query("SELECT a.ID, b.name FROM ids AS a JOIN personInfo AS b ON a.ID = b.ID"); 

PREGUNTA:

¿Es todo esto correcto hasta ahora? Si es así: ¿Por qué es esto así? ¿La consulta de MySQL es más rápida si tengo una segunda tabla? ¿Con solo una mesa es increíblemente lento? ¿Cuál es la forma más rápida de resolver mi problema (seleccionando los nombres que coinciden con los ID de la matriz de PHP)?

Respuesta

2

Si usted tiene un montón de IDS (varios cientos o más), la alimentación de los valores en una tabla temporal y unirse en realidad es más rápido.

es posible que desee leer este artículo:

+0

Muchas gracias! Esto es exactamente lo que necesitaba. Entonces, para unos 20 parámetros, ambos enfoques tienen el mismo rendimiento. Pero para unos 500 parámetros, debería preferir la tabla temporal. – caw

2

SI tiene ID, solo debe consultar los ID que tiene. Así

$result = mysql_query("SELECT name FROM personInfo WHERE id = 1 OR id = 3 OR id = 39 OR ..."); 

estaría bien, aunque me gustaría utilizar

$result = mysql_query("SELECT name FROM personInfo WHERE id IN (1,2,3,4....)) 
+0

Gracias, esta sintaxis se ve mejor :) – caw