Requete SQL

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 : Requete SQL

Re: Requete SQL

par moogli » 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 :)


@+

Re: Requete SQL

par NUAGE » 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.

Re: Requete SQL

par moogli » 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.

@+

Re: Requete SQL

par NUAGE » 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

Re: Requete SQL

par NUAGE » 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.

Re: Requete SQL

par ghost5922 » 01 juin 2013, 13:31

Bonjour,

ok donc un order by Etablissement puis etudiant cela doit marche corrige si les tables et champ sont incorrecte
<?php
$res= "SELECT * FROM Etudiant, Participation WHERE id_form='3' AND Participation.id_etu=Etudiant.id_etu order by Etudiant.id_etabliss,Participation.id_etu";
$query=mysql_query($res);
$tab=array();
while($ligne = mysql_fetch_array($query)){
   $pdf->Cell(0,10,$name,0,0, 'L');
	$pdf->Ln(5);
}

?>

Re: Requete SQL

par NUAGE » 01 juin 2013, 10:59

Bonjour,

Je suis désolé de ne pas être assez clair, en fait je crée une formation à laquelle suivant les établissements j'ajoute des étudiants de cet établissement.
Du coup pour une formation donnée donc dans ce cas 3, je veux pouvoir générer un pdf pour chaque établissement participants.
Exactement comme tu l'as dis ghost5922 :
nom_etabliss 1
id_etu
1
2
3
nom_etabliss 2
4
5
6

Re: Requete SQL

par ghost5922 » 31 mai 2013, 12:09

tu veux afficher tous les participant a la formation 3 puis les autres ? donne nous un exemple qu'on vois mieux la chose :) ou dit nous comment tu veux les affiches

formation 3
Etablissement 1 =
id_elev
1
5
6
7
Etablissement 2 =
id_elev
2
4
8
9
etc .

Re: Requete SQL

par NUAGE » 31 mai 2013, 12:07

Re,

Alors, ça m'affiche "Array" à la place des noms des étudiants mais ça reste toujours tout les étudiants participants à la formation 3

Re: Requete SQL

par ghost5922 » 31 mai 2013, 12:03

Edit : que veux tu vraiment car un order by id comme tu le dit "Ça trie bien par id_etabliss"

Re: Requete SQL

par NUAGE » 31 mai 2013, 11:55

Re,

Ça m'affiche ça Unknown column 'Array' in 'where clause'

Re: Requete SQL

par ghost5922 » 31 mai 2013, 11:52

ok et comme cela

tu avais oublie un [] sur cette ligne $tab[$ligne['id_etu']][] = $ligne['nom_etu'];
<?php
$res= "SELECT * FROM Etudiant, Participation WHERE id_form='3' AND Participation.id_etu=Etudiant.id_etu";
  $query=mysql_query($res);
  $tab=array();
      while($ligne = mysql_fetch_array($query)){
       $tab[$ligne['id_etu']][] = $ligne['nom_etu'];
        
        }

  $res2= "SELECT * FROM Etudiant, Participation WHERE id_form='3' AND Participation.id_etu in ($tab )order by id_etabliss";
  $query2=mysql_query($res2) or die(mysql_error());
 
      while($ligne2 = mysql_fetch_assoc($query2)){
     $pdf->Cell(0,10,$ligne2['nom_etu'],0,0, 'L');
         $pdf->Ln(5);
     
        }
        mysql_free_result($query2);

 
?>

Re: Requete SQL

par NUAGE » 31 mai 2013, 11:46

Re,

Ça trie bien par id_etabliss mais moi je veux que ça me trie les participants qui ont le même id_etabliss
C'est pour ça j'ai essayé de mettre tout les participants dans un tableau mais ça ne marche pas...

Re: Requete SQL

par Mazarini » 31 mai 2013, 11:39

Essayes ca avec phpmyadmin ou un client mysql.
SELECT id_etabliss, NomEtu, PrenomEtu FROM Etudiant, Participation 
WHERE id_form='3' AND Participation.id_etu=Etudiant.id_etu
order by id_etabliss
Normalement, ca ne peut être que trié par id_etabliss

Perso, je mettrai order by id_etabliss, NomEtu, PrenomEtu (voir je remplacerai id_etabliss par le nom.

Re: Requete SQL

par ghost5922 » 31 mai 2013, 11:35

Re,

essaie de mettre
ORDER BY Etudiant.id_etabliss desc
ou
ORDER BY Etudiant.id_etabliss asc