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 :

Affichage d'une hiérarchie


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Par défaut Affichage d'une hiérarchie
    Hell'O,


    J'ai un problème (encore un ), j'ai fais un système de tuto, mais ça ne s'affiche pas comme je le voudrais.
    ça devrait afficher quelque chose comme ça:

    - Partie 1
    -- Chapitre 1
    --- sous-chapitre 1
    --- sous-chapitre 2
    --- sous-chapitre 3

    Mais ça m'affiche ça :

    - Partie 1
    -- Chapitre 1
    --- sous-partie 1
    - Partie 1
    -- Chapitre 1
    --- sous-partie 2
    - Partie 1
    -- Chapitre 1
    --- sous-partie 3

    Biensurs, si il y a une autre partie ou un autre chapitre ça doit afficher quelque chose comme ça :

    - Partie 1
    -- Chapitre 1
    --- sous-chapitre 1
    --- sous-chapitre 2
    --- sous-chapitre 3

    -- Chapitre 2
    --- sous-chapitre 1
    --- sous-chapitre 2
    --- sous-chapitre 3

    Partie 2
    -- Chapitre 1
    --- sous-chapitre 1
    --- sous-chapitre 2
    --- sous-chapitre 3

    -- Chapitre 2
    --- sous-chapitre 1
    --- sous-chapitre 2
    --- sous-chapitre 3

    Alors voici ma requête et mon affichage :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
    $req = mysql_query('SELECT cours_partie_offi.id AS id_cours_partie_offi,
    						   cours_partie_offi.id_cours,
    						   cours_partie_offi.nom AS nom_partie,
    						   cours_partie_offi.description,
    						   chapitre_offi.id AS id_chap_offi,
    						   chapitre_offi.id_partie,
    						   chapitre_offi.nom AS nom_chap,
    						   chapitre_offi.miniature,
    						   sous_partie_offi.id AS id_sp,
    						   sous_partie_offi.id_chapitre,
    						   sous_partie_offi.nom
    						   FROM cours_partie_offi
    						   LEFT JOIN chapitre_offi ON cours_partie_offi.id = chapitre_offi.id_partie 
    						   LEFT JOIN sous_partie_offi ON chapitre_offi.id = sous_partie_offi.id_chapitre
    						   WHERE cours_partie_offi.id_cours=1 AND cours_partie_offi.id = chapitre_offi.id_partie AND chapitre_offi.id = sous_partie_offi.id_chapitre')or die (mysql_error());
    while($donnees = mysql_fetch_array($req))
    	{
    ?>
    <div class="tuto-corps">
    <div class="titre-tuto"><?php echo stripslashes($donnees['nom_partie']); ?></div>
    <div class="tuto-contenu">
     
    <?php echo bbcode(stripslashes($donnees['description']));?>
    <br /><br />
    <?php 
    echo '<a href="affichage-cours.php?c='.$donnees['id_chap_offi'].'">';
    echo stripslashes($donnees['nom_chap']);?>
    </a><br />
    <img src="<?php echo $donnees['miniature'];?>" class="flot_gauche"/>
    <?php
    echo '<a href="affichage-cours.php#'.$donnees['id'].'?c='.$donnees['id_chap_offi'].'">';
    echo stripslashes($donnees['nom']);?></a><br />
    <?php
    }
    ?>

    J'espère que vous pourrez m'aider

  2. #2
    Membre expérimenté Avatar de juliens9
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 192
    Par défaut
    tu as deux solutions :

    Soit tu passe par un group by dans ta requete, et tu group by partie et puis par chapitre.

    Soit tu coupe ta requete en trois partie. Tu selectionne d'abord les partie, ensuites les chapitre puis les sous chapitre. A chaque fois tu fais un while, et tu rajoute dans ta clause where la valeur récupéré.

  3. #3
    Membre confirmé Avatar de nimbus_77
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut voui
    j'utilise la seconde façon frequement,
    peut être pas parfait, mais cela a 2 mérites :

    c'est clair et facile à debugger,
    et surtout cela permet de faire de grande chose,
    en partant de petites opérations bien maîtrisées .

    nimbus
    'Quand je serais GRAND, je ferais tout sur la même ligne de commande !'

  4. #4
    Membre expérimenté Avatar de juliens9
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 192
    Par défaut
    Oui la deuxieme solution a le merite d'etre plus facile a mettre en oeuvre et a debugger, par compte elle est un peu plus consommatrice de connexion et de temps en bases de données, et prend plus de lignes....

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Par défaut
    J'avais essayé avec group by mais ça ne m'afficher plus qu'un chapitre et d'une sous-partie.

    Et pour la 2e solutions, ce n'est pas déconseillé de faire ça à cause du serveur ? (ralentissement)

    Sinon pas d'autre moyen ?

    Merci de vos réponses si rapide

    EDIT: déjà que l'hebergeur est assez long à afficher les pages...
    Voici mon code avec les GROUP BY

    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
    $req = mysql_query('SELECT cours_partie_offi.id AS id_cours_partie_offi,
    						   cours_partie_offi.id_cours,
    						   cours_partie_offi.nom AS nom_partie,
    						   cours_partie_offi.description,
    						   chapitre_offi.id AS id_chap_offi,
    						   chapitre_offi.id_partie,
    						   chapitre_offi.nom AS nom_chap,
    						   chapitre_offi.miniature,
    						   sous_partie_offi.id AS id_sp,
    						   sous_partie_offi.id_chapitre,
    						   sous_partie_offi.nom
    						   FROM cours_partie_offi
    						   LEFT JOIN chapitre_offi ON cours_partie_offi.id = chapitre_offi.id_partie 
    						   LEFT JOIN sous_partie_offi ON chapitre_offi.id = sous_partie_offi.id_chapitre
    						   WHERE cours_partie_offi.id_cours=1 AND cours_partie_offi.id = chapitre_offi.id_partie AND chapitre_offi.id = sous_partie_offi.id_chapitre
    						   GROUP BY cours_partie_offi.id = chapitre_offi.id_partie AND chapitre_offi.id = sous_partie_offi.id_chapitre')or die (mysql_error());

  6. #6
    Membre expérimenté Avatar de juliens9
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 192
    Par défaut
    Non ce n'est pas deconseiller, si tu creer un index sur tes champs chapitre et sous partie, il y aura vraiment aucun probleme.

    Sinon ya surment d'autres solutions, mais plus simple que celle la je pense pas.

    Sinon pour ton group by tu as surment une clause where qui est pas bonne et qui te sort qu'un resultat pour chaque groupe

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Par défaut
    Non ce n'est pas deconseiller, si tu creer un index sur tes champs chapitre et sous partie, il y aura vraiment aucun probleme.
    Je comprend pas "creer un index" ^^

    et voici le code avec GROUP BY

    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
    $req = mysql_query('SELECT cours_partie_offi.id AS id_cours_partie_offi,
    						   cours_partie_offi.id_cours,
    						   cours_partie_offi.nom AS nom_partie,
    						   cours_partie_offi.description,
    						   chapitre_offi.id AS id_chap_offi,
    						   chapitre_offi.id_partie,
    						   chapitre_offi.nom AS nom_chap,
    						   chapitre_offi.miniature,
    						   sous_partie_offi.id AS id_sp,
    						   sous_partie_offi.id_chapitre,
    						   sous_partie_offi.nom
    						   FROM cours_partie_offi
    						   LEFT JOIN chapitre_offi ON cours_partie_offi.id = chapitre_offi.id_partie 
    						   LEFT JOIN sous_partie_offi ON chapitre_offi.id = sous_partie_offi.id_chapitre
    						   WHERE cours_partie_offi.id_cours=1 AND cours_partie_offi.id = chapitre_offi.id_partie AND chapitre_offi.id = sous_partie_offi.id_chapitre
    						   GROUP BY cours_partie_offi.id = chapitre_offi.id_partie AND chapitre_offi.id = sous_partie_offi.id_chapitre')or die (mysql_error());

  8. #8
    Membre confirmé Avatar de nimbus_77
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut voui bien sur !
    Citation Envoyé par juliens9 Voir le message
    Oui la deuxieme solution a le merite d'etre plus facile a mettre en oeuvre et a debugger, par compte elle est un peu plus consommatrice de connexion et de temps en bases de données, et prend plus de lignes....
    Mais une application qui ne marche pas dévore plus d'énergie qu'une solution qui s'avère efficace ...

    J'entends bien que tout code est fait pour être optimisé (l'Homme aussi d'ailleurs)...
    Plus sérieusement, à l'heure actuelle et sauf pour de TRES grosses applications, je ne suis pas sur que ce soit 'dangereux' .

    nimbus
    'Quand je serais GRAND, je ferais tout sur la même ligne de commande !'

  9. #9
    Membre expérimenté Avatar de juliens9
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 192
    Par défaut
    On part dans des debats philosophiques.....

    C'est sur qu'une requete executer 100 fois par jour avec 100 enregistrement posera jamais probleme. Apres si c'est 1000x ca, ca devient différent.

    Tout dépend du trafic et des couts du serveur.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Par défaut
    D'accord au pire, je ferais plusieurs requêtes, mais le code avec group by que j'ai ne march pas...

    Merci de votre aide

  11. #11
    Membre expérimenté Avatar de juliens9
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 192
    Par défaut
    Fais voir ton code.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Par défaut
    Finalement j'ai fais des boucles dans les boucles, sinon voici le code que j'avais avant

    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
     
    $req = mysql_query('SELECT cours_partie_offi.id AS id_cours_partie_offi,
    						   cours_partie_offi.id_cours,
    						   cours_partie_offi.nom AS nom_partie,
    						   cours_partie_offi.description,
    						   chapitre_offi.id AS id_chap_offi,
    						   chapitre_offi.id_partie,
    						   chapitre_offi.nom AS nom_chap,
    						   chapitre_offi.miniature,
    						   sous_partie_offi.id AS id_sp,
    						   sous_partie_offi.id_chapitre,
    						   sous_partie_offi.nom
    						   FROM cours_partie_offi
    						   LEFT JOIN chapitre_offi ON cours_partie_offi.id = chapitre_offi.id_partie 
    						   LEFT JOIN sous_partie_offi ON chapitre_offi.id = sous_partie_offi.id_chapitre
    						   WHERE cours_partie_offi.id_cours=1 AND cours_partie_offi.id = chapitre_offi.id_partie AND chapitre_offi.id = sous_partie_offi.id_chapitre
    						   GROUP BY cours_partie_offi.id = chapitre_offi.id_partie AND chapitre_offi.id = sous_partie_offi.id_chapitre')or die (mysql_error());

Discussions similaires

  1. Saisie et affichage d'une chaîne de caractères
    Par sali dans le forum Assembleur
    Réponses: 2
    Dernier message: 31/03/2004, 18h01
  2. Affichage ds une DBGrid
    Par TieumB dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/01/2004, 16h52
  3. Affichage d'une boite de dialogue nonmodale avec MFC
    Par the.cable.guy dans le forum Windows
    Réponses: 3
    Dernier message: 04/07/2003, 17h59
  4. Affichage d'une image sous linux
    Par Braim dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 25/03/2003, 10h41
  5. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43

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