récupération partielle sur une table

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : récupération partielle sur une table

par ouckileou » 28 avr. 2006, 11:23

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

par nabs » 28 avr. 2006, 11:20

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

par ouckileou » 28 avr. 2006, 11:12

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 ?

par nabs » 28 avr. 2006, 11:09

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 !

par ouckileou » 28 avr. 2006, 10:39

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

par nabs » 28 avr. 2006, 10:35

bein non car dans cette table le X apparait plusierus fois. en faite il y a plusieurs tuples pour X.

par ouckileou » 28 avr. 2006, 10:28

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 ?

récupération partielle sur une table

par nabs » 28 avr. 2006, 10:21

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.