Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2010, 08h22   #1
Futur Membre du Club
 
Avatar de CactO_o's
 
Inscription : mars 2007
Messages : 98
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 98
Points : 18
Points : 18
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 :
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 ...
__________________
KreatoO
CactO_o's est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 08h47   #2
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 529
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

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

Informations forums :
Inscription : novembre 2005
Messages : 2 529
Points : 3 521
Points : 3 521
Saluton,
Une lecture qui devrait t'être profitable :
Gestion d'arborescence en SQL
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 14h08   #3
Futur Membre du Club
 
Avatar de CactO_o's
 
Inscription : mars 2007
Messages : 98
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 98
Points : 18
Points : 18
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..
__________________
KreatoO
CactO_o's est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 14h52   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 977
Points : 18 219
Points : 18 219
Envoyer un message via MSN à CinePhil
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.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 17h03   #5
Futur Membre du Club
 
Avatar de CactO_o's
 
Inscription : mars 2007
Messages : 98
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 98
Points : 18
Points : 18
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é...
__________________
KreatoO
CactO_o's est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 17h22   #6
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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 ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 17h25   #7
Futur Membre du Club
 
Avatar de CactO_o's
 
Inscription : mars 2007
Messages : 98
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 98
Points : 18
Points : 18
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..
__________________
KreatoO
CactO_o's est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 10h12   #8
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 450
Points : 6 450
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
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h37.


 
 
 
 
Partenaires

Hébergement Web