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 30/11/2011, 21h39   #1
Invité de passage
 
Homme
Inscription : décembre 2006
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 37
Points : 2
Points : 2
Par défaut Selection de toutes les occurences et sous occurences

Bonsoir,

J'ai une table où je veux stocker toutes les entreprises avec les filiales qu'elles contiennent, la table se présente comme suit :

Citation:
entreprises
id
nom
adresse
telephone
id_parent
id_mere
Le champ "id_parent" contient l'id du parent direct de l'entreprise et le champ "id_mere" contient le champ de l'entreprise du niveau le plus haut.

Pour l'instant je fais un SELECT * FROM entreprises WHERE id_mere = x pour sortir toutes les entreprises qui font partie de l'entreprise mère mais comment les ordonner de façon hierarchique selon les id_parent ?

J'espère que j'ai assez expliqué ma question...

Merci d'avance

RP
RobertP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 21h45   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 654
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 654
Points : 2 656
Points : 2 656
bonjour,

MySql ne supporte pas les requêtes récursive à partir de là vous ne pouvez pas faire ce que vous demandez en sql.... sauf si un order by sur id_parent suffit
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 21h48   #3
Invité de passage
 
Homme
Inscription : décembre 2006
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 37
Points : 2
Points : 2
Merci de ta réponse, je suis donc obligé de passer par une boucle PHP...
RobertP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 22h49   #4
Invité de passage
 
Homme
Inscription : décembre 2006
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 37
Points : 2
Points : 2
Bonsoir,

Je reviens sur mon problème car je bloque un peu...

Comment je peux faire pour sortir toutes mes occurences sous forme d'une arborescence ? Comme par exemple :

Entreprise 1
Sous entreprise 1.1
Sous entreprise 1.2
Sous entreprise 1.3
Entreprise 2
Sous entreprise 2.1
Sous entreprise 2.2
Sous entreprise 2.3
...

Merci d'avance
RobertP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 05h36   #5
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
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 530
Points : 3 523
Points : 3 523
Saluton,
Connais-tu cet article de SQLPro afférent à la Gestion d'arbres par représentation intervallaire ?
__________________
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 déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 21h26   #6
Invité de passage
 
Homme
Inscription : décembre 2006
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2006
Messages : 37
Points : 2
Points : 2
Bonsoir,

Maintenant je le connais, merci

Mais ça sous entend de stocker toutes mes occurences et sous occurences dans les mêmes plages d'ID chose que je ne peux pas gérer dans le temps car mes utilisateurs (multiples) pourront créer des entreprises et sous entreprises n'importe quand. Le principe de SQLPro convient tout à fait à un arbre figé.

A ce moment là, est-ce qu'il existe une autre méthode que lister les occurences et pour chaque occurence lister tous ses enfants et ainsi de suite ?
RobertP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 07h01   #7
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
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 530
Points : 3 523
Points : 3 523
Alors c'est que tu n'as pas bien lu cet article parce que, de mémoire, y sont exposées les méthodes d'insertion et/ou de suppression d'un élément, voire d'une branche de l'arborescence.
Donc il n'y est en aucune manière question d'un arbre figé.
__________________
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 déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 09h54   #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 426
Points : 6 426
Citation:
Envoyé par RobertP Voir le message
A ce moment là, est-ce qu'il existe une autre méthode que lister les occurences et pour chaque occurence lister tous ses enfants et ainsi de suite ?
Dans la mesure où MySQL ne dispose pas des requêtes récursives, la gestion de l'arborescent par arbre intervallaire reste la meilleure solution.
__________________
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
Vieux 16/12/2011, 09h52   #9
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 872
Points : 1 358
Points : 1 358
salut,

tu peux tout simplement faire ta récursion grâce à une procédure stockée qui va remonter ta table telle qu'elle est implémentée en se basant sur id_parent pour trouver chaque entreprise de degré supérieur...

c'est bien sur moins efficace qu'une écriture à base de requête hiérarchique implémenté en natif comme sur un oracle, mais ça marche très bien et ça a le mérite de t'éviter les aller-retour php-mysql

ta structure suffit largement à implémenter ça...
pour générer ton arbre il suffit de 2 procédures...
une procédure principale qui va:
  • initialiser le comptage par des variables(par exemple un nombre que tu convertiras en lettre et auquel chaque niveau concatènera celui correspondant à sa place dans le parcours)
  • autoriser le 255 niveaux de récursion (le max)
  • créer une table temporaire où seront insérés les résultats
  • parcourir la table pour trouver les entreprises mères par un curseur et lancer la procédure de récursion sur elles en lui passant la valeur de comptage de ta hiérarchie
  • afficher la table temporaire
la procédure récursive qui va:
  • récupérer les infos souhaitées pour chaque entreprise trouvée et ajouter l'info de comptage
  • insérer ces données dans la table résultat
  • se lancer sur chaque résultat trouvé pour faire la récursion

en gros c'est ce que te ferait une requête hiérarchique donc on ne fait que faire ce qui n'existe pas sous mysql

après à toi de voir ce qui convient le mieux selon tes besoins...
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 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 19h34.


 
 
 
 
Partenaires

Hébergement Web