IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

erreur du résultat de select distinct


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut erreur du résultat de select distinct
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    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.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut
    j ai trouvé une solution qui me donne presque ce que je cherche a faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    $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

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Il ne faut jamais remplacer une jointure par deux requêtes + une boucle. Vous êtes sur la bonne voie dans votre second poste.
    Donné nous votre schéma de base de donnée pour que l'on puisse vous aider.

    Ce que j'ai tendance à faire dans ce genre de cas c'est de créer un tableau associatif. Dans votre cas le tableau ressemblerait à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {
        "Classe 1" : [
            ["groupe 1", "sujet 1"],
            ["groupe 2", "sujet 1"],
            ["groupe 3", "sujet 1"],
            ["groupe 3", "sujet 2"]
        ]
    },
    {
        ....
    }
    Ensuite il suffit de parcourir ce tableau pour faire le traitement voulu (affichage, ...)

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut je viens de trouver la solution
    merci pour votre réponse, mais je viens de trouver la solution avec l'aide de quelqu un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $AncienneClasse="";
     
    while(...)
     
    If($r5!=$AncienneClasse)
    {
        $AncienneClasse=$r5;
        JAfficheNouvellesection();
    }

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <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?

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut
    voici la portion de code que j ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?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>';
    }
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. résultat de " select count "
    Par marie253 dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/06/2004, 12h07
  2. Select distinct et order by
    Par arsgunner dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/06/2004, 11h17
  3. [ASP][SQL]Erreur lors d'un select
    Par DEC dans le forum ASP
    Réponses: 12
    Dernier message: 08/06/2004, 17h54
  4. Réponses: 6
    Dernier message: 08/06/2004, 14h51
  5. equivalent SELECT DISTINCT pour MyBase?
    Par chrisou31 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo