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 :

Selection de toutes les occurences et sous occurences


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Points : 22
    Points
    22
    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 :

    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

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    Merci de ta réponse, je suis donc obligé de passer par une boucle PHP...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    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

  5. #5
    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,
    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)

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    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 ?

  7. #7
    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
    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)

  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 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    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 et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  9. #9
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    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...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

Discussions similaires

  1. SELECT GROUP_CONCAT : toutes les valeurs mais conditions
    Par lrntlbx dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/12/2010, 16h15
  2. Réponses: 4
    Dernier message: 20/05/2010, 09h55
  3. Récupérer toutes les pages des sous-sites
    Par Knightmare dans le forum SharePoint
    Réponses: 5
    Dernier message: 17/02/2009, 08h44
  4. [MySQL] select where toutes les categories
    Par rduvrac dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/03/2008, 07h48
  5. Requete SELECT : prendre toutes les valeurs pour 1 champ
    Par fab22montpellier dans le forum Requêtes
    Réponses: 1
    Dernier message: 02/09/2005, 09h12

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