Erreur du résultat de select distinct [Résolu]

Signaler
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016
-
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016
-
Bonjour,
Je viens vous voir après avoir passé des heures et des heures a chercher une solution sur internet.
Je vous explique;
j'ai une table qui contient la classe, le groupe et le sujet a traité et je voudrais afficher un resultat comme suit :
+Classe 1
- groupe 1 - sujet 1
- groupe 2 - sujet 1
- groupe 3 - sujet 1
- groupe 3 - sujet 2
+Classe 2
- groupe 1 - sujet 1
- groupe 2 - sujet 2
- groupe 3 - sujet 1
...
voila ma requete
include 'fichier_con.php';
$req="SELECT DISTINCT classe FROM lycees WHERE nom_lycee = '".$nom_lycee."' ORDER BY classe";
$rep=mysql_query($req);
 
while($d=mysql_fetch_array($rep))
{
	$r5 = $d['classe'];
$req2="SELECT DISTINCT groupe, sujet FROM lycees WHERE classe = '".$r5."' ORDER BY groupe";
$rep2=mysql_query($req2);

?>

<?php
 echo 'classe '.$r5.'</br >';
while($d2=mysql_fetch_array($rep2))
{       $r2 = $d2['groupe'];
        $r3 = $d2['sujet'];
		
		?>




<a   href="lycee-<?php echo $d['id_lycee']; ?>"><?php echo $r2; ?> <?php echo $r3; ?></a></br>
<?php }  ?>
<?php }  ?>

(je recupère le nom de lycee d un formulaire plus haut ce n est pas mon soucis ici).
le soucis maintenat et que dans les resultats, j'ai presque ce que je veux sauf que j'ai 2 lignes que je n'ai pas dans ma bd

+Classe 1
- groupe 2 - sujet 2
et
+Classe 2
- groupe 1 - sujet 2

j ai comparé a mainte reprise entre les resultats de la bd et les resultat de la requete et ce sont les deux lignes qui ne sont pas dans la bd.
merci de m aider ou me proposer une autre solution.

9 réponses

Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
6 juin 2021
155
Une autre solution consisterais à lister toutes les données en les tirants, puis que ce soit ton code PHP qui gère la séparation entre les classes.
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

merci pour votre reponse mais desolé j ai pas compris
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
6 juin 2021
155
En gros, tu tries par Classe, groupe puis sujet.
Ensuite, tu boucles sur le résultat, et dès que tu change de Classe, tu refait une nouvelle section.
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

j avais testé untruc presque pareil j avai commencé par un while sur classe et dedans j ai fait un while avec groupe puis dedans encore u while sur classe mais le resultat reste le meme
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

si ce n est pas ça pouvez vous m indiquer votre proposition au niveau du code?
merci
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
6 juin 2021
155
ça donnait quoi le code ?
Car j'ai du mal à me l'imaginer.
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

j ai trouvé une solution qui me donne presque ce que je cherche a faire
$req="SELECT DISTINCT classe, groupe, sujet FROM lycees WHERE nom_lycee = '".$nom_lycee."' ORDER BY classe";
$rep=mysql_query($req);
while($d=mysql_fetch_array($rep))
{$r5 = $d['classe'];
echo 'classe '.$r5.'</br >';
 
$r2 = $d['groupe'];
    $r3 = $d['sujet'];
	//$r1 = $d['id_lycee'];
 
 ?>
<?php echo'
<a href="lycee-'.$r1.'">'.$r2.' '.$r3.'</a></br>
 ';?>
 <?php
 }
?>

le resultat que j ai est le suivant :
Classe 1
groupe1 [SC]
Classe 1
groupe2 [SC]
Classe 1
groupe3 [SC]
Classe 1
groupe3 [MATHS]
Classe 2
groupe1 [SC]
Classe 2
groupe2 [MATHS]
Classe 2
groupe3 [SC]
Classe 3
groupe1 [SC]
Classe 3
groupe2 [SC]
Classe 4
groupe1 [SC]
Classe 5
groupe1 [SC]

Le résultat certes correspond à la bd mais comme vous pouvez le constater j'ai une redondance de "Classe" ce que je veux c'est avoir Classe une seule fois a la tete de chaque bloc d'enregistrement :(
Messages postés
32940
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 juin 2021
351
Bonjour,

ça marche

N'oublie pas de clôturer la discussion...
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

juste derniere chose avant de cloturer la discussion, quand j ai integrer ce script dans ma page, j ai eu un petit soucis d affichage
j ai cette structure :
<div classe "classe">nom de la classe
<div classe "gs">
<a>groupe - sujet<a>
</div>
</div>

alors apres l integration, si une classe contient plus d un groupe ou sujet, j ai cette affichage la :
<div classe "classe">c1
<div classe "gs">
<a>g1 - s1<a>
</div>
<div classe "gs">
<a>g1 - s2<a>
</div>
</div>

alors que ca devrait etre comme ça :
<div classe "classe">c1
<div classe "gs">
<a>g1 - s1<a>
<a>g1 - s2<a>
</div>
</div>

et je crois pas que la meme boucle if que j ai utlisé en amant servirait car ce n est pas une variable, n'est ce pas?
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

voici le code que j ai utilisé
<?php 
$req="SELECT DISTINCT classe, groupe, sujet FROM lycees WHERE nom_lycee = '".$nom_lycee."' ORDER BY classe";
$rep=mysql_query($req);
$Ancienneclasse="";
while($d=mysql_fetch_array($rep))
{$r5 = $d['saison'];
If($r5!=$Ancienneclasse)
{
    $Ancienneclasse=$r5;
echo '<div class="classe">
<h3>Classe '.$r5.'</h3>
</div>';}
$r2 = $d['groupe'];
$r3 = $d['sujet'];
echo '<div class="gs">
<a href="lycee-'.$r1.'">'.$r2.' '.$r3.'</a>
</div>';
}
?>
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
6 juin 2021
155
Au lien de lier ton div class="gs" au début du div parent, comme ça tu ne l'ajoutes qu'une fois.
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

le soucis c est pas la div d ouverture mais celle de fermeture, car j ai une une div de fermeture avec une div bas qui donne un aspect a la fin de la section, et ce sont ces 2 la qui se repetent avec la boucle, tout peux regarder le vrai aperçu en bas
Messages postés
32940
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 juin 2021
351
Bonjour,

Il faut garder la même logique que celle qui t'a été proposée.
Par exemple :


<style>

.Class1{
 border-width:2px;
 color : red;
 border-style:dotted;
 border-color:black;
 font-size:14px;
}
.Class2{
 border-width:1px;
 color : blue;
  border-color:green;
   border-style:dotted;
  padding:5px 10px 5px 5px;
}
.Class3{
 border-width:1px;
 color : dark;
  border-color:grey;
   border-style:dotted;
  padding-left:40px;
}

</style>

<?php
// Pour le test : Création d'un tableau représentant le résultat
// de ta requête :

$req=array();
$tmp=array();


for ($x=0;$x<5;$x++){
  for ($y=0;$y<3;$y++){
  for ($z=0;$z<3;$z++){
$tmp=array("groupe_".$x,"classe_".$y,"Sujet_".$x.$y.$z);
$req[]=$tmp;
}}}


$grpPrec = "";
$classPrec = "";
foreach($req as $res){

 $grp = $res[0];
 $classe = $res[1];
 $sujet = $res[2];
 if($grp != $grpPrec){

  echo "<div class='Class1' id='grp".$grp."'>".$grp."</div>";
   echo affichClass($classe);
  echo affichSujet($sujet);

 
 }else{
     
    if($classe != $classPrec){
      echo affichClass($classe);
     echo affichSujet($sujet);
     echo "</div>";
   }else{
     echo affichSujet($sujet);
   }
 }
$grpPrec = $grp;
$classPrec = $classe;
}


function affichClass($classe){
  return "<div class='Class2' id='classe".$classe."'>".$classe."</div>";
}

function affichSujet($sujet){
  return "<div class='Class3' id='classe".$sujet."'>".$sujet."</div>";
}


?>




ce qui donne :


Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

merci pour votre réponse, mais ce n'est pas ce que je cherche à faire.
le résultat que je cherche à atteindre est le suivant :
+Classe 1
- groupe 1 - sujet 1
- groupe 2 - sujet 1
- groupe 3 - sujet 1
- groupe 3 - sujet 2
+Classe 2
- groupe 1 - sujet 1
- groupe 2 - sujet 2
- groupe 3 - sujet 1
etc.
et pour info voila exactement le code que je cherche a atteindre :
<div class="classe">
<div class="haut"></div>
<h3 >classe 1</h3>
<div class="bas"></div>
</div>
<div class="gs">
<div class="g-s">
<a>Groupe n° 01 sujet : SC</a>
<a>Groupe n° 01 sujet : SC</a>
<a>Groupe n° 02 sujet : Math</a>
</div>
<div class="bas"></div>
</div>
<div class="classe">
<div class="haut"></div>
<h3 >classe 2</h3>
<div class="bas"></div>
</div>
<div class="gs">
<div class="g-s">
<a>Groupe n° 01 sujet : SC</a>
<a>Groupe n° 02 sujet : SC</a>
<a>Groupe n° 02 sujet : Math</a>
</div>
<div class="bas"></div>
</div>

mais honettement je n arrive pas a appliquer votre reponse a mon script
voici un aperçu de ce que je veux faire :
http://sdz-upload.s3.amazonaws.com/prod/upload/exe.jpg
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
6 juin 2021
155
Si tu veux avoir des marges, tu peux régler directement ça dans ton CSS, pas besoin de DIV superflues.

Quand tu génères ton code HTML, essayes de regrouper tes balises comme ceci :
<div class="classe">
<div class="haut"></div>
<h3 >classe 2</h3>
<div class="bas"></div>
</div>
<div class="gs">
<div class="g-s">

<a>Groupe n° 01 sujet : SC</a>

<a>Groupe n° 02 sujet : SC</a>

<a>Groupe n° 02 sujet : Math</a>

</div>
<div class="bas"></div>
</div>
(Un saut de ligne=1 groupe)
Messages postés
32940
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 juin 2021
351

$classPrec = "";
foreach($req as $res){

 $classe = $res[0];
 $grp = $res[1];
 $sujet = $res[2];

 if($classe != $classPrec){
   if($classPrec !=''){
   echo '</div>
      <div class="bas"></div>
      </div>';
   }
 echo "<div class=\"classe\">
    <div class=\"haut\"></div>";
  echo "<h3>".$classe."</h3>";
 echo "<div class=\"bas\"></div>
    ";
 echo '<div class="gs">
    <div class="g-s">';
   echo "<a>Groupe n° ".$grp." sujet : ".$sujet."</a><br>";
 }else{    
   echo "<a>Groupe n° ".$grp." sujet : ".$sujet."</a><br>";  
 }
$classPrec = $classe;
}

echo '</div>
   <div class="bas"></div>
   </div>';



Ce qui donne :
<div class="classe">
    <div class="haut"></div><h3>class0</h3><div class="bas"></div>
    <div class="gs">
    <div class="g-s"><a>Groupe n° groupe0 sujet : Sujet_001</a><br><a>Groupe n° groupe0 sujet : Sujet_002</a><br><a>Groupe n° groupe1 sujet : Sujet_010</a><br><a>Groupe n° groupe1 sujet : Sujet_011</a><br><a>Groupe n° groupe1 sujet : Sujet_012</a><br><a>Groupe n° groupe2 sujet : Sujet_020</a><br><a>Groupe n° groupe2 sujet : Sujet_021</a><br><a>Groupe n° groupe2 sujet : Sujet_022</a><br></div>
      <div class="bas"></div>
      </div><div class="classe">
    <div class="haut"></div><h3>class1</h3><div class="bas"></div>
    <div class="gs">
    <div class="g-s"><a>Groupe n° groupe0 sujet : Sujet_101</a><br><a>Groupe n° groupe0 sujet : Sujet_102</a><br><a>Groupe n° groupe1 sujet : Sujet_110</a><br><a>Groupe n° groupe1 sujet : Sujet_111</a><br><a>Groupe n° groupe1 sujet : Sujet_112</a><br><a>Groupe n° groupe2 sujet : Sujet_120</a><br><a>Groupe n° groupe2 sujet : Sujet_121</a><br><a>Groupe n° groupe2 sujet : Sujet_122</a><br></div>
      <div class="bas"></div>
      </div><div class="classe">
    <div class="haut"></div><h3>class2</h3><div class="bas"></div>
    <div class="gs">
    <div class="g-s"><a>Groupe n° groupe0 sujet : Sujet_201</a><br><a>Groupe n° groupe0 sujet : Sujet_202</a><br><a>Groupe n° groupe1 sujet : Sujet_210</a><br><a>Groupe n° groupe1 sujet : Sujet_211</a><br><a>Groupe n° groupe1 sujet : Sujet_212</a><br><a>Groupe n° groupe2 sujet : Sujet_220</a><br><a>Groupe n° groupe2 sujet : Sujet_221</a><br><a>Groupe n° groupe2 sujet : Sujet_222</a><br></div>
      <div class="bas"></div>
      </div><div class="classe">
    <div class="haut"></div><h3>class3</h3><div class="bas"></div>
    <div class="gs">
    <div class="g-s"><a>Groupe n° groupe0 sujet : Sujet_301</a><br><a>Groupe n° groupe0 sujet : Sujet_302</a><br><a>Groupe n° groupe1 sujet : Sujet_310</a><br><a>Groupe n° groupe1 sujet : Sujet_311</a><br><a>Groupe n° groupe1 sujet : Sujet_312</a><br><a>Groupe n° groupe2 sujet : Sujet_320</a><br><a>Groupe n° groupe2 sujet : Sujet_321</a><br><a>Groupe n° groupe2 sujet : Sujet_322</a><br></div>
      <div class="bas"></div>
      </div><div class="classe">
    <div class="haut"></div><h3>class4</h3><div class="bas"></div>
    <div class="gs">
    <div class="g-s"><a>Groupe n° groupe0 sujet : Sujet_401</a><br><a>Groupe n° groupe0 sujet : Sujet_402</a><br><a>Groupe n° groupe1 sujet : Sujet_410</a><br><a>Groupe n° groupe1 sujet : Sujet_411</a><br><a>Groupe n° groupe1 sujet : Sujet_412</a><br><a>Groupe n° groupe2 sujet : Sujet_420</a><br><a>Groupe n° groupe2 sujet : Sujet_421</a><br><a>Groupe n° groupe2 sujet : Sujet_422</a><br></div>
   <div class="bas"></div>
   </div>


Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
voila ce que j'ai fait mais je n ai l'affichage que je cherche, je n ai qu un groupe qui s qffiche dans la premiere classe
<?php
$req="SELECT DISTINCT classe, groupe, sujet FROM lycees WHERE nom_lycee = '".$nom_lycee."' ORDER BY classe";
$res=mysql_query($req);
$classprec = ""; //classprec
while($d=mysql_fetch_array($rep)){
$r5 = $d['classe'];
$r2 = $d['groupe'];
$r3 = $d['sujet'];

 if($r5 != $classprec){
   if($classprec !=''){
			echo '</div>
						<div class="bas"></div>
						</div>';
		 }
	echo "<div class=\"ras4\">
				<div class=\"haut\">
</div>";//classe haut de la classe
  echo "<h3>".$r5."</h3>";
	echo "<div class=\"bas\">
</div>
				";//classe bas de la classe
	echo '<div class="gs">
<div class="g-s">';
 }else{
echo ' <a>Groupe n° '.$r2.' sujet : '.$r3.'</a> ';	    
	}
$classprec = $r5;
}

echo '</div>
			<div class="bas"></div>
			</div>';
			
?>

vraiment je perds la tete :(
Messages postés
32940
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 juin 2021
351
essaye ceci : *

<?php
$req="SELECT DISTINCT classe, groupe, sujet FROM lycees WHERE nom_lycee = '".$nom_lycee."' ORDER BY classe";
$res=mysql_query($req);
$classprec = ""; //classprec
while($d=mysql_fetch_array($rep)){
$r5 = $d['classe'];
$r2 = $d['groupe'];
$r3 = $d['sujet'];

 if($r5 != $classprec){
   if($classprec !=''){
			echo '</div>
			<div class="bas"></div>
			</div>';
		 }
	echo "<div class=\"ras4\">
		<div class=\"haut\">
</div>";//classe haut de la classe
  echo "<h3>".$r5."</h3>";
  echo "<div class=\"bas\">
   </div>";//classe bas de la classe
	echo '<div class="gs">
 <div class="g-s">';
 echo ' <a>Groupe n° '.$r2.' sujet : '.$r3.'</a> ';	   
 }else{
echo ' <a>Groupe n° '.$r2.' sujet : '.$r3.'</a> ';	    
	}
$classprec = $r5;
}

echo '</div>
	<div class="bas"></div>
	</div>';
			
?>



Si ça ne te donne toujours pas le bon resultat...donnes nous la un extrait du code html généré.. pour voir ce qui ne va pas..
oh mon dieu jordan, tu me sauve la, tu m enleve une epine du pied je t en suis vraiment reconnessant.
ça a marché
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

reconnaissant