requete en fonction d'une autre

Eléphant du PHP | 107 Messages

18 nov. 2008, 13:54

Bonjour,

je suis un peu bloqué sur cette requete :
$req="select id from table where nom like '%".$nom."%' ";
if($res=mysql_query($req))
{
while($row=mysql_fetch_array($res))
{
$idS=$row['id'].",";
$req="select nom from table1 where id_matri IN ($idS) ";
$res=mysql_query($req);
$nb=mysql_num_rows($res);
$row=mysql_fetch_array($res);
return $row["id"];

}
}
La seconde requete me retourne le code suivant :
select nom from table1 where id_matri IN(66,)
alors que $idS contient des valeurs comme si après : 66,10,133,1236,12,

Ce que je veux faire c'est de récupérer les noms dans la table1 dont les id sont dans $idS

MERCI

Mammouth du PHP | 1353 Messages

18 nov. 2008, 14:50

Bonjour,

Ce qu'il faut faire c'est concaténer les valeurs au moyen d'un .=
$req="select id from table where nom like '%".$nom."%' "; 
if($res=mysql_query($req)) 
{ 
while($row=mysql_fetch_array($res)) 
{ 
$idS.=$row['id'].","; 
}
//attention il faudra enlever le dernier caractere , de $idS
$req="select nom from table1 where id_matri IN ($idS) "; 
$res=mysql_query($req); 
$nb=mysql_num_rows($res); 
$row=mysql_fetch_array($res); 
return $row["id"];  
}
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Mammouth du PHP | 804 Messages

18 nov. 2008, 15:17

exacte et pour virer la petite virgule en trop :wink:
$idS= substr($idS,0,strlen($idS)-1);

Eléphant du PHP | 353 Messages

18 nov. 2008, 15:29

Ou alors, histoire d'etre plus propre
Il stock les ids dans un tableau qu'il implode ensuite comme ceci :
$req="select id from table where nom like '%".$nom."%' "; 
if($res=mysql_query($req)) 
{ 
$IdsList = array();
while($row=mysql_fetch_array($res)) 
{ 
$IdsList[] = $row['id']; 
}
//attention il faudra enlever le dernier caractere , de $idS
$req="select nom from table1 where id_matri IN (".implode(",", $idS).") "; 
$res=mysql_query($req); 
$nb=mysql_num_rows($res); 
$row=mysql_fetch_array($res); 
return $row["id"];  
}

ViPHP
ViPHP | 4674 Messages

18 nov. 2008, 20:29

Hey :),

Je t'arrête (vous arrête) tout de suite =; ! Il est hors de question de faire des requêtes SQL dans une boucle, sinon je mors (et c'est pas des blagues …).

Essaye de réaliser la même chose avec une seule requête SQL. Cela ne me semble pas bien compliqué et tu gagneras énormément en performance, crois moi. Ce qui est présenté en ce moment est à proscrire absolument.

Édition : au passage :
$idS= substr($idS,0,strlen($idS)-1);
peut se simplifier en :
$idS = substr($idS, 0, -1);
:)
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 107 Messages

19 nov. 2008, 11:23

Bonjour,

Ok ça a bien marché merçi bien pour votre instruction c'est génial

:D

ViPHP
ViPHP | 4674 Messages

19 nov. 2008, 19:10

Tu n'as pas fait des requêtes en boucle j'espère ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).