Page 1 sur 1

récupération partielle sur une table

Posté : 28 avr. 2006, 10:21
par nabs
slt a tous,
j'ai un pb qui est simple a expliquer mais pour le résoudre je vois pas grand chose :
en faite je fais un simple SELECT pour extraire des infos sur une table en fonction d'une données :
$query="SELECT idform,resultat,lieu,date FROM fsuiv WHERE idcel='".$this->id."'";
     $requete=mysql_query($query);
	 $i=0;
	 while($agent =mysql_fetch_array($requete))
	 {
	  $idform[$i]=$agent["idform"];
	  $this->date[$i]=$agent["date"];
	  $this->lieu[$i]=$agent["lieu"];
	  $this->resultat[$i]=$agent["resultat"];
	  $i++;
                  }
le pb c que ca marche a moitier. j'ai bien une extraction de données, mais pour un tuple or qu'il y en a plusieurs a faire.
Ce qui me perturbe c'est que la requete marche tré bien sur d'autres tables, je fais exactement le meme traitement sur d'autres tables et ca marche mais la non.
si vous voyez une erreur merci de bien vouloir m'aider a la corriger.

Posté : 28 avr. 2006, 10:28
par ouckileou
Je ne comprends pas ton problème, si tu mets une condition "WHERE idcel= X", c'est normal qu'il ne te renvoie qu'un seul tuple non ?

Posté : 28 avr. 2006, 10:35
par nabs
bein non car dans cette table le X apparait plusierus fois. en faite il y a plusieurs tuples pour X.

Posté : 28 avr. 2006, 10:39
par ouckileou
Quand une requête ne renvoie pas (ou ne fait pas) ce que l'on attend :
- faire afficher les erreurs MySQL (ou autre)
ex :
mysql_query($requete) or die (mysql_error());
- afficher le SQL généré (c'est ce code qui est important) :
echo $requête;
- regarder si rien ne cloche
- tester directement dans MySQL (ex : via phpMyAdmin) et ajuster

Posté : 28 avr. 2006, 11:09
par nabs
c vraiment bizarre. j'ai fais le test sur phpmyadmin, il me génère bien les 3 tuples que j'attendais avec la meme requete.
j'ai rajouté le "or die (mysql_error()); " mais ya aucune erreur qui s'affiche. ca doit etre un pb de récupération dans mes variables apres la recupération du resultat de la requete alors. ca me deroute tout ca !

Posté : 28 avr. 2006, 11:12
par ouckileou
Si tu simplifies comme ça (juste pour voir)
while($agent =mysql_fetch_array($requete)) {
      echo $agent["idform"].'<br />';
      echo $agent["date"].'<br />';
      echo $agent["lieu"].'<br />';
      echo $agent["resultat"].'<br /><br />';
}
ça donne quoi ?

En fait, en repartant de ton premier message, qu'est-ce qui te fais voir que tu ne récupères qu'un seul tuple ?

Posté : 28 avr. 2006, 11:20
par nabs
ce qui me fait apparaitre qu'il y a un seul tuple c l'affichage de i. mais le pb est résolu. en réalité j'avais une autre requete qui était executée a l'interieur du code, mais je ne l'ai pas faite apparaitre pour que ca soit plus compréhensible pour vous. le code avec l'erreur est le suivant :
     $query="SELECT idform,resultat,lieu,date FROM fsuiv WHERE idcel='".$this->id."'";
     $requete=mysql_query($query);
	 $i=0;
	 while($agen =mysql_fetch_array($requete))
	 {
	  $idform[$i]=$agen["idform"];
	  $this->date[$i]=$agen["date"];
	  $this->lieu[$i]=$agen["lieu"];
	  $this->resultat[$i]=$agen["resultat"];
     $query="SELECT intitule FROM formation WHERE idform='".$idform[$i]."'";
     $requete=mysql_query($query);
	 $form=mysql_fetch_array($requete);
	 $this->formation[$i]=$form["intitule"];
	  $i++;
	 }
le code corrigé est celui ci :
     $query="SELECT idform,resultat,lieu,date FROM fsuiv WHERE idcel='".$this->id."'";
     $requete=mysql_query($query);
	 $i=0;
	 while($agen =mysql_fetch_array($requete))
	 {
	  $idform[$i]=$agen["idform"];
	  $this->date[$i]=$agen["date"];
	  $this->lieu[$i]=$agen["lieu"];
	  $this->resultat[$i]=$agen["resultat"];
	  $i++;
	 }
	 for($j=0;$j<$i;$j++)
	 {
     $query="SELECT intitule FROM formation WHERE idform='".$idform[$j]."'";
     $requete=mysql_query($query);
	 $form=mysql_fetch_array($requete);
	 $this->formation[$j]=$form["intitule"];
la lecon a en tirer c'est qu'il faut faire attention quand on a des requetes qui se melangent, et qu'il faut poser tout son code quand on demande quelquechose sur un forum.lol.
merci en tt k de ton aide ouckileou

Posté : 28 avr. 2006, 11:23
par ouckileou
Généralement quand on boucle sur les résultats d'un SELECT pour faire d'autres SELECT, il y aurait possibilité de regrouper tout ça dans une seule et même requête, avec des jointures

En faisant quelques petits tests à l'affichage pour grouper sur une valeur

Parceque là, ça peut faire un sacré paquet de requêtes quand même :D