Requete SQL

Eléphant du PHP | 167 Messages

01 juin 2013, 13:49

Bonjour,

Il me met qu'il ne connaît pas "name" et puis j'ai changé par $ligne['nom_etu'] ça m'a afficher tout les étudiants dans le pdf.

Eléphant du PHP | 167 Messages

04 juin 2013, 13:49

Bonjour,

J'ai essayé de changer mon code, en créant un tableau pour les résultats des établissements, un autre pour les résultats des étudiants.
Mais j'arrive toujours à récupérer tout les étudiants inscrits à la formation quelque soit l'établissement :

print_r($tab) ==>
Array ( [1] => Array ( [0] => Etablissement1 [1] => Etablissement1 ) [2] => Array ( [0] => Etablissement2 [1] => Etablissement2 ) [5] => Array ( [0] => Etablissement3 ) [6] => Array ( [0] => Etablissement4 ) )

$res= "SELECT * FROM Etudiant, Participation,Etablissement WHERE idFormation='$idFormation' AND Participation.idEtudiant=Etudiant.idEtudiant AND Etudiant.idEtablissement=Etablissement.idEtablissement";
  $query=mysql_query($res);
  $tab=array();
      while($ligne = mysql_fetch_array($query)){
       $tab[$ligne['idEtablissement']][]= $ligne['nomEtablissement'];  

}
$res2= "SELECT * FROM Etudiant, Participation,Etablissement WHERE idFormation='$idFormation' AND Participation.idEtudiant=Etudiant.idEtudiant AND Etudiant.idEtablissement=Etablissement.idEtablissement";
  $query=mysql_query($res2);
  $tab2=array();
      while($ligne = mysql_fetch_array($query)){
 $tab2[$ligne['idEtudiant']][]= $ligne['nomEtudiant'];   
     $tab2[$ligne['idEtudiant']][]= $ligne['prenomEtudiant']; 
}

$mysql_select="SELECT  * FROM Participation, Etudiant WHERE Participation.idEtudiant=Etudiant.idEtudiant AND  idEtablissement in (".$tab.") ORDER BY idEtablissement";
 
$rest=mysql_query($mysql_select);

foreach($tab2 as $value){
       $pdf->Cell(0,10,$value[0]." ".$value[1],0,0, 'L');
       $pdf->Ln(5);
     
}
Je n'arrive pas à voir où est le problème, pourriez-vous m'aider svp

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 juin 2013, 15:34

salut,


il faut vraiment que tu fasse une jointure correcte sur toute tes tables, c'est le merdier la ;)

Rien que les deux premières sont inutile. Elle ramène les mêmes données, avec potentiellement 5000 champs, et tu n'en utilise qu'un à chaque fois ....

une seule requête doit suffire pour cela.

au pire deux.
dans ce sens je te donne l'algo a suivre en pseudo code :
- sélectionner les formations
- pour chaque formation
- récupérer les infos des étudiants inscrit à la formation "courante" et le nom de leur établissement (de l'étudiant)
- ajouter l'info dans le pdf
- fin pour chaque

Pense à ne sélectionner que les infos utile, se sera plus clair car en voyant la requête on sait d'où proviennent les infos.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 167 Messages

05 juin 2013, 09:41

Bonjour,

Merci, j'ai modifié le code, il fonctionne pour les deux premiers établissements mais après ça me garde le dernier enregistrement.
Existe-il un moyen de pouvoir créer automatiquement mes 3 pdf pour par exemple 3 établissements ? Ça pourrait peut-être réglé le pb.
$sql="SELECT e.idEtablissement from participation p , etablissement e, formation f, etudiant et
where p.idFormation='3' and p.idFormation=f.idFormation and e.idEtablissement=et.idEtablissement and et.idEtudiant=p.idEtudiant
group by e.idEtablissement";


$requete = mysql_query( $sql ) ;

$pdf = new PDF();

$pdf->AddPage();
while( $result = mysql_fetch_array( $requete ) ){
$mysql_select="SELECT distinct et.nomEtudiant, et.prenomEtudiant FROM Participation p , Etudiant et WHERE p.idEtudiant=et.idEtudiant AND et.idEtablissement='".$result['idEtablissement']."'";
 
$rest=mysql_query($mysql_select);

    while($lignes = mysql_fetch_array($rest)){

     $pdf->Cell(0,10,$lignes['nomEtudiant']. " ". $lignes['prenomEtudiant'],0,0, 'L');
     $pdf->Ln(5);
}

}
Merci de votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 juin 2013, 19:39

je crois que le plus simple c'est que tu nous fournisse le ddl (dans ton cas les create table et éventuelle alter table) et un jeux de données pour pouvoir tester :)


@+
Il en faut peu pour être heureux ......