Page 1 sur 1

requete en fonction d'une autre

Posté : 18 nov. 2008, 13:54
par jajax
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

Posté : 18 nov. 2008, 14:50
par guilt92
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"];  
}

Posté : 18 nov. 2008, 15:17
par dogmongo
exacte et pour virer la petite virgule en trop :wink:
$idS= substr($idS,0,strlen($idS)-1);

Posté : 18 nov. 2008, 15:29
par yaug
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"];  
}

Posté : 18 nov. 2008, 20:29
par Hywan
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);
:)

Posté : 19 nov. 2008, 11:23
par jajax
Bonjour,

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

:D

Posté : 19 nov. 2008, 19:10
par Hywan
Tu n'as pas fait des requêtes en boucle j'espère ?