2010-03-21 11 views
0

J'ai une table qui contient les noms des membres et un champ avec plusieurs numéros d'identification. Je souhaite créer une requête qui renvoie des résultats dans lesquels les valeurs des champs ID chevauchent toutes les valeurs du tableau.PHP While Loops from Arrays

Par exemple: lastname: Smith prenom: John id: 101, 103

Je Tableau # 1 avec les valeurs 101, 102, 103

Je veux la requête pour afficher tous les membres qui ont les valeurs 101 ou 102 ou 103 répertoriées dans leur champ id avec plusieurs identifiants répertoriés.

Array ( [0] => 101 
     [1] => 102 
     [2] => 103) 

$sql="SELECT firstname, lastname, id 
     FROM members WHERE id LIKE '%".$array_num_1."%'"; 
$result=mysql_query($sql); 

while ($rows=mysql_fetch_array($result)) { 
     echo $rows['lastname'].', '.$rows['firstname'].'-'.$rows['id']; 
     } 

J'ai essayé de le simplifier. Les ID sont stockés dans une autre table et j'ai généré le tableau à partir de cette table.

$array_num_1 = array(); 
$sql_id="SELECT id FROM id_table WHERE id < 200"; 
$result_id=mysql_query($sql_id); 
while($rows_id=mysql_fetch_array($result_id)){; 
     $array_num_1[] = $rows_id['id']; 
} 
+3

Enregistrement d'une liste de valeurs et d'essayer d'écrire une requête contre elle est une * image * façon de modéliser une relation. Mon conseil est d'utiliser votre base de données comme base de données. Créer une table enfant pour la relation, puis il est trivial à interroger. – cletus

+0

Les ID sont stockés dans une table distincte. Voir modifier ci-dessus. – Michael

+0

Donc, vous devez vous débarrasser de ces id dans la table des membres –

Répondre

2

Normalisez votre base de données. Faites ces identifiants dans une table séparée.

Edit: Et puis réponses d'utilisation ci-dessous

+0

Les ID sont stockés dans une table distincte. Voir modifier ci-dessus. – Michael

1

Si vous devez le faire de cette façon:

$sql = "SELECT firstname, lastname, id FROM members WHER id IN (" . implode(', ', $array) . ")" 

Comme @cletus dit dans son commentaire, cependant, la base de données est fait pour ce genre de chose. Le coder en dur dans un tableau semble être la façon suboptimale de faire les choses.

+0

J'ai essayé d'utiliser la fonction IN, le problème est qu'il y a plusieurs numéros dans le champ ID. Donc, où id est égal à "101, 103" ne fonctionne pas avec IN (101, 102, 103) – Michael

+0

Temps pour réparer votre structure de base de données, alors. – ceejayoz

+0

Les ID sont stockés dans une table distincte. Voir modifier ci-dessus. – Michael

1

Vous êtes probablement pour IN:

SELECT firstname, lastname, id FROM members WHERE id IN (1, 2, 3); 

Bien sûr, vous pouvez créer (1, 2, 3) dynamiquement, par exemple utilisant implode.


Oups, je viens de me rendre compte que je me suis trompé de schéma. Comme d'autres l'ont conseillé, vous devriez le normaliser.

+0

Que signifie «normaliser»? Je suis semi-nouveau à cela. – Michael

+0

@middus (OT) maintenant où ai-je vu cette photo récemment?;) – Gordon

+0

@Gordon Il est toujours intéressant de voir ce que font les gens ici. :) – middus

0
SELECT firstname, lastname, m.id 
FROM members m, id_table i ON m.id=id_name 
WHERE i.id < 200