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

Requêtes MySQL Discussion :

Récupérer une arborescence en une seule requête


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club Avatar de CactO_o's
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 98
    Points : 47
    Points
    47
    Par défaut Récupérer une arborescence en une seule requête
    Bonjour à tous,

    Je suis en train de coder un petit forum et j'ai donc une liste de catégorie qui se trouve dans une table (simplifier pour l'occasion) ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    id | id_parent | Nom
    ---------------------
     1 |   NULL    | Informatique
     2 |   1       | Programmation
     3 |   1       | Matériel
     4 |   2       | Web
     5 |   2       | C/C++
     6 |   4       | HTML
     7 |   4       | CSS
     8 |   4       | JavaScript


    J'aimerai à partir de cette table, récupérer l'arborescence des catégories en partant de n'importe qu'elle autre, c'est à dire que si je demande à partir de 6 (HTML), je voudrais recevoir 6-4-2-1 (peu importe la forme, un traitement PHP n'est pas gênant).

    PS : L'intérêt de la chose est bien sur de connaitre ça uniquement en une seul requete, et non un foreach avec une requete par bouclage !

    PS2 : Sinon j'avais pensé à un champ 'arborescence' en BDD qui prendrai donc pour 6 la valeur '4-2-1' mais je n'aime vraiment pas ...

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Une lecture qui devrait t'être profitable :
    Gestion d'arborescence en SQL

  3. #3
    Membre du Club Avatar de CactO_o's
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    J'ai déjà vu ce modèle auparavant et il me déplait particulièrement car les ID sont amené à consentement changer..

    Je cherche à faire ça pour la réalisation d'un forum.. Et plus particulièrement de plusieurs forum (un champ 'id_forum' existe dans la table me permettant de connaitre à qui appartienne les catégories).

    Du coup, pour l'ajout d'une catégorie je vais être obligé de modifier la totalités de la table..

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par CactO_o's Voir le message
    J'ai déjà vu ce modèle auparavant et il me déplait particulièrement car les ID sont amené à consentement changer..
    Faux ! Ce qui change, ce sont les bornes gauche et droite. Rien ne t'empêche d'ajouter un ID auto-incrémenté qui sera invariable.

  5. #5
    Membre du Club Avatar de CactO_o's
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    Certe, mais ces bornes droites et gauches sont constamment en train de changer..
    Comme j'ai plusieurs forum a gérer en même temps, le dernier de la liste changera à chaque fois qu'une catégorie est modifié...

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    Si tu veux éviter cette solution, alors je te conseille de partir sur une solution en php, avec une fonction récursive, et de mettre éventuellement un système de cache(genre en mettant a jour ton cache en cas de modification des forums seulement )

    Deja, as-tu une idée de la profondeur max de ton arbre (ou veux-tu absolument une profondeur potentiellement infinie ) ? Car si tu décides de limiter le nombre de niveau de ton arbre (vu que tu parles de "petit forum"), il y a des alternatives...

    Et aussi un ordre de grandeur du nombre de forum au total ?

  7. #7
    Membre du Club Avatar de CactO_o's
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    Pour ce qui est de la profondeur, elle sera infini... Même si je penses que 3 ou 4 enfants sera déjà pas mal du tout !

    Pour ce qui concerne du nombre de forum, je ne sais vraiment pas.. Tout ce que je sais c'est que plus j'en aurais plus je serais gagnant...

    Je pensais aussi ajouter un champ 'arborescence' à éditer lors des modifications, et je penses que je vais finir par faire ça, ne voyant aucunes autres solutions ..

    Je trouve que la solution proposé précédemment est très lourde en mise en place et lors des modifications pour peu de résultats..

  8. #8
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    Les requêtes récursives n'existant pas sous MySQL, tu n'as malheureusement pas 36 solutions : soit mettre en place une structure arborescente, soit déléguer la récursivité à PHP.
    Ou encore changer de SGBD, par exemple pour PostgreSQL, qui gère les requêtes récursives... Mais là, ça dépend de ton hébergeur.

    ced

Discussions similaires

  1. [SP-2010] récupérer les terme d'une colonne d'une liste dans une autre liste
    Par Noruk dans le forum SharePoint
    Réponses: 2
    Dernier message: 09/02/2015, 18h15
  2. [WD16] Récupérer la valeur d'une colonne d'une table d'une ligne précise
    Par elghers_hocine dans le forum WinDev
    Réponses: 16
    Dernier message: 06/05/2011, 18h11
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. Récupérer le nom d'une colonne d'une table dans une variable
    Par mimi51340 dans le forum Général Java
    Réponses: 4
    Dernier message: 13/03/2008, 14h23
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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