Erreur du résultat de select distinct

Résolu
alone06
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016
- 12 mai 2014 à 21:22
alone06
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016
- 15 mai 2014 à 13:27
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

NHenry
Messages postés
14942
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
161
12 mai 2014 à 21:37
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.
0
alone06
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

12 mai 2014 à 22:09
merci pour votre reponse mais desolé j ai pas compris
0
NHenry
Messages postés
14942
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
161
12 mai 2014 à 22:20
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.
0
alone06
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

12 mai 2014 à 22:26
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
0
alone06
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

12 mai 2014 à 22:27
si ce n est pas ça pouvez vous m indiquer votre proposition au niveau du code?
merci
0
NHenry
Messages postés
14942
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
161
12 mai 2014 à 22:47
ça donnait quoi le code ?
Car j'ai du mal à me l'imaginer.
0
alone06
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

13 mai 2014 à 08:54
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 :(
0
NHenry
Messages postés
14942
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
161
13 mai 2014 à 09:17
Dans ce cas, tu peux faire un truc du genre :
$MemoAncien="";

while(...)

If($ValeurActuelle!=$MemoAncien)
{
$MemoAncien=$ValeurActuelle;
AfficherNouvellesection();
}

Je te laisse adapter.
0
alone06
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

13 mai 2014 à 09:28
ça marche merci beaucoup pour votre aide
0
jordane45
Messages postés
35770
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
358
13 mai 2014 à 10:10
Bonjour,

ça marche

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

13 mai 2014 à 10:56
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?
0
alone06
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

13 mai 2014 à 11:59
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>';
}
?>
0
jordane45
Messages postés
35770
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
358
Modifié par jordane45 le 13/05/2014 à 14:57
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alone06
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

Modifié par alone06 le 13/05/2014 à 18:29
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
0
NHenry
Messages postés
14942
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
161
14 mai 2014 à 13:41
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)
0
jordane45
Messages postés
35770
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
358
Modifié par jordane45 le 14/05/2014 à 23:53

$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
0
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 :(
0
jordane45
Messages postés
35770
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 juillet 2022
358
14 mai 2014 à 23:55
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..
0
oh mon dieu jordan, tu me sauve la, tu m enleve une epine du pied je t en suis vraiment reconnessant.
ça a marché
0
alone06
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

15 mai 2014 à 13:27
reconnaissant
0