2011-05-04 4 views
5

En PHP, j'ai un tableau de 11 personnesseulement l'ID de chaque personne est donnée:MySQL: Inscrivez-vous (2 tables) vs requêtes individuelles (1 table)

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

dans ma base de données MySQL, il y a une table contenant des informations détaillées sur chaque personne:

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

PROBLÈME:

Alors maintenant, je veux sélectionner le nom correspondant pour chaque ID dans le tableau PHP. Je ne peux imaginer deux solutions pour ce faire:

1. boucle for:

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

2. opérateur logique OU

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

Les deux solutions sont lentes, ne sont-ils pas?

Mais si j'avais une autre table MySQL contenant les ID de tableau PHP ...

TABLE ids 
- ID (integer) 

... Je pourrais utiliser une jointure pour faire un MySQL vraiment rapide recherche, non?

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

QUESTION:

Tout cela est correct jusqu'à présent? Si oui: pourquoi est-ce ainsi? La requête MySQL est plus rapide si j'ai une seconde table? Avec une seule table, c'est incroyablement lent? Quel est le moyen le plus rapide de résoudre mon problème (en sélectionnant les noms correspondant aux ID du tableau PHP)?

Répondre

2

Si vous avez beaucoup de ids (plusieurs centaines ou plus), l'alimentation des valeurs dans une table temporaire et se joindre à elle est plus rapide.

Vous pouvez lire cet article:

+0

Merci beaucoup! C'est exactement ce dont j'avais besoin. Ainsi, pour environ 20 paramètres, les deux approches ont les mêmes performances. Mais pour environ 500 paramètres, vous devriez préférer la table temporaire. – caw

2

SI vous avez des ID, vous devriez juste interroger les ID que vous avez. Alors

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

serait juste, bien que j'utiliser

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

Merci, cette syntaxe semble mieux :) – caw