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 :

Arborescence


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Par défaut Arborescence
    Bonjour,

    Voila plusieurs jours que je m'efforce à faire une arborescence en MYsql php sans trouver la bonne requette SELECT à taper :

    ci dessous le schéma se base :



    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
    CREATE TABLE IF NOT EXISTS `rubrique` (
      `ID_RUBRIQUE` bigint(4) NOT NULL AUTO_INCREMENT,
      `INTITULE` varchar(255) NOT NULL,
      `DESCRIPTION` text,
      `KEYWORD` varchar(255) DEFAULT NULL,
      `URL` varchar(255) NOT NULL,
      `ETAT` int(11) NOT NULL,
      PRIMARY KEY (`ID_RUBRIQUE`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;
     
    CREATE TABLE IF NOT EXISTS `contien` (
      `ID_RUBRIQUE` bigint(4) NOT NULL,
      `ID_RUBRIQUE_1` bigint(4) NOT NULL,
      `NIVEAUX` int(11) NOT NULL,
      `PLACE` int(11) DEFAULT NULL
      PRIMARY KEY (`ID_RUBRIQUE`,`ID_RUBRIQUE_1`),
      KEY `I_FK_CONTIEN_RUBRIQUE` (`ID_RUBRIQUE`),
      KEY `I_FK_CONTIEN_RUBRIQUE1` (`ID_RUBRIQUE_1`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;


    et donc voila ce que jessaye de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT rubrique.ID_RUBRIQUE,contien.ID_RUBRIQUE_1, INTITULE, contien.PLACE,contien.NIVEAUX, ETAT
    FROM rubrique, contien
    WHERE rubrique.ID_RUBRIQUE = contien.ID_RUBRIQUE
    AND rubrique.ETAT >=1
    ORDER BY contien.ID_RUBRIQUE_1,contien.NIVEAUX ASC


    Cette requette fonctionne pour les rubrique de niveaux 1 et 2 si j'ai une rubrique de niveau 3 ben elle ne se positionne pas au dessous de ca categorie parente.

    donc c pas bon.
    Si quelqu'un a une idée meme s'il faut faire le traitement en php je suis preneur

    Merci de votre compréhension

    Cordialment

  2. #2
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir,

    par défaut mysql ne gère pas les requêtes récursives, depuis la version 5 de MySQL, tu peux créer une procédure stockée récursive qui te permettra de parcourir tes rubriques quelque-soit leur niveau dans l'arborscence.

    SI tu connais le nombre maximal de niveaux possible, tu peux tout simplement imbriquer des requêtes SELECT les unes dans les autres (autant de fois que de niveaux).

    Plus simplement tu peux faire une fonction PHP récursive.

    J'avais développé un exemple il y a quelques temps sur ce sujet :
    http://www.developpez.net/forums/d66...ir-tables-sql/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Par défaut Je comprend
    J'ai regardé le topic que tu ma dit et je comprend pas grand chose enfet ce que moi je voudrait fairre c'est afficher ces rubue dans uneeeeeeebleau hml exemple
    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
     
    <table>
    <tr><td>Accueik</td></tr>
    <tr><td>Rubrique 1</td><tr>
    <tr><td>-soubrubirque 1</td><tr>
    <tr><td>--sousoubrubirque 1</td><tr>
    <tr><td>Rubrique 2</td><tr>
    <tr><td>-soubrubirque 2</td><tr>
    <tr><td>--sousoubrubirque 2</td><tr>
    <tr><td>Rubrique 3</td><tr>
    <tr><td>-sousrubrique3</td><tr>
    <tr><td>-sousrubrique3</td><tr>
    <tr><td>Rubrique 4</td><tr>
    <tr><td>Rubrique 5</td><tr>
    </table>
    donc je reprend la fonction utlisé en aldaptant à ma table :

    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
     
    function listPages($currentPageRow){
    	include("../../connect/connect.php");
        if(!is_null($currentPageRow)){
            $query = 'SELECT * FROM rubrique,contien WHERE rubrique.ID_RUBRIQUE=contien.ID_RUBRIQUE AND 
    contien.ID_RUBRIQUE_1=:parent';
    $resquery=$conn->prepare($query);
    $resquery->bindParam('parent',$currentPageRow['ID']);
        }
        else{
            $query = 'SELECT * FROM rubrique,contien WHERE rubrique.ID_RUBRIQUE=contien.ID_RUBRIQUE';
    $resquery=$conn->prepare($query);
     
        }
    $resquery->execute();
    $row=2;
        if(count($row) > 0){
            echo '<tr>';
            while($page=$resquery->fetch(PDO::FETCH_BOTH)){
                echo '<td>'.$page['INTITULE'].'</td>',
                listPages($page);
            }
            echo '</tr>';
        }
    }
    listPages(null);
    Svp aidez moi je galere pour ces histoire d'aborescence je crois qu'un bon tutoriel s'impose.

  4. #4
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir,

    Déjà tu fait une inclusion de ton fichier de connexion à chaque appel de la fonction listPage, étant donné qu'elle est récursive ca va inclure ton fichier autant de fois qu'il y a de rubriques dans ta base.

    il faut inclure ton fichier de connexion en dehors de la fonction.

    Ensuite je ne pense pas que cette requête te renvoie les éléments de premier niveau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM rubrique,contien WHERE rubrique.ID_RUBRIQUE=contien.ID_RUBRIQUE
    Les rubriques ancêtres ont un ID_RUBRIQUE à NULL, ou à 0 ou autre ?

    Sinon qu'est ce qui ne fonctionne pas avec ce code ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Par défaut souci de répétition
    ou alors en mettant

    global $conn;

    dans la fonction c'est vrai

    ca marche mintenant.

    Mais mon probleme de départ est toujours la je croyé ke c'était à cause de mon fichier connet mais non : je m'explique

    Je sais pas si vous avez compris ma fonction mais elle a pour but d'ordonner les catégories et sous catégories ais de suie:

    Par exemple

    Rubrique
    sousRubrique
    sousousRubrique1

    Le souci c'est que une fois que les rubriques sont ordonner on dirai qu'il reboucle et répète d'autre rubiruqe qui on déja été répété
    Si quelqun à une piste aider moi merci d'avance

  6. #6
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir,
    merci de ne pas me laisser de messages visiteurs lorsque vous souhaitez de l'aide, répondez simplement sur votre sujet et je verrais automatiquement que vous avez répondu

    Le problème est évident, voici les lignes qui posent problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $row=2;
        if(count($row) > 0){
    Etant donné que count($row) est toujours > à 0, forcement ca rappelle la fonction et ca boucle à l'infini.

    Je pense que tu dois utiliser rowCount :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $numrows = $resquery->rowCount();
         if($numRows > 0){

Discussions similaires

  1. Recuperation Arborescence
    Par ramseb dans le forum HyperFileSQL
    Réponses: 6
    Dernier message: 16/06/2003, 09h52
  2. controle d'arborescence
    Par billyboy dans le forum Windows
    Réponses: 4
    Dernier message: 13/06/2003, 21h19
  3. [VB6] parcourir une arborescence de repertoire
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/04/2003, 17h33
  4. créer une arborescence windows sous forme d'arbre java
    Par chupachoc dans le forum Composants
    Réponses: 3
    Dernier message: 01/10/2002, 16h48
  5. arbre de parcour d'arborescence windows
    Par chupachoc dans le forum Composants
    Réponses: 7
    Dernier message: 09/09/2002, 08h09

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