Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 04/09/2011, 11h35   #1
Invité de passage
 
Inscription : février 2009
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 3
Points : 0
Points : 0
Par défaut Hiérarchie, récursivité table MySQL

Bonjour,
Je suis tombé sur pleins de sujets similaires sur ce forum mais ne trouve pas, ou plutot n'arrive pas à faire ce que je recherche.

J'ai une table comme ceci:

| id | name | parent |
------------------------
1 Tom 0
2 Mat 1
3 Léa 1
4 Marie 2
5 Max 4
....



Mat et Léa sont donc enfants de Tom, Marie est la fille de Mat et Max le fils de Marie.
Je souhaiterais trouver dans l'ordre toutes les descendances de Tom sur 3 niveaux (c'est à dire ses enfants, ses petits enfants et ses arrières petits enfants).

Sachant que je connais le nombre de niveaux de la hiérarchie je devrais pouvoir utiliser des UNION ALL, mais je n'y arrive pas .

Une petite aide serait très appréciée, merci par avance pour vos réponses.
nodapio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 11h53   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
bonjour

as tu lu ce petit-papier ?


Notes : ta modélisation ne permet d'intégrer que les parents biologiques quid des familles recomposées
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 12h31   #3
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
veuillez consulter ce lien
http://www.developpez.net/forums/d51...scence-oracle/
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 13h14   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
Bonjour,

Avec MySql et pas de requête récursive on est un peu limité.
La modélisation n'aidant pas non plus ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
SELECT a.*, 'niveau 0'
FROM tst a
WHERE id = 1
union ALL
SELECT b.*,  'niveau 1' 
FROM tst b
INNER JOIN tst a ON a.id = b.parent 
WHERE a.id = 1
union ALL
SELECT c.*,  'niveau 2'
FROM tst c
INNER JOIN tst b ON b.id = c.parent
INNER JOIN tst a ON a.id = b.parent 
WHERE a.id = 1
etc
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 13h34   #5
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Citation:
Envoyé par punkoff Voir le message
Bonjour,

Avec MySql et pas de requête récursive on est un peu limité.
La modélisation n'aidant pas non plus ...
la "modélisation intervallaire" ne pourrait pas fonctionner sous MySQL ?
à cause des PS à mettre en œuvre ? (curiosité )
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 14h26   #6
Invité de passage
 
Inscription : février 2009
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 3
Points : 0
Points : 0
Citation:
Envoyé par dehorter olivier Voir le message
...
Justement, je cherchais une solution similaire à CONNECT BY dans Oracle mais compatible avec ma bdd.
1) CONNECT BY .. PRIOR est un truc spécifique à Oracle et limité en matière de récursivité.
2) la norme SQL propose les requêtes récursives avec les CTE commençant par le mot clef WITH (depuis 1999)
3) MySQL ne supporte pas les requêtes récursives. C'est une des très nombreuses limitations de ce pseudo SGBD R qu'est MySQL, en matière de langage SQL. A lire : http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/

Soit vous utilisez un vrai SGBDR comme PostGreSQL, soit vous faites des bidouilles, car même le mode intervallaire nécessite des vues et des proc stock, ce pourquoi MySQL est peu apte !

A +
nodapio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 19h22   #7
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
Citation:
Envoyé par dehorter olivier Voir le message
la "modélisation intervallaire" ne pourrait pas fonctionner sous MySQL ?
à cause des PS à mettre en œuvre ? (curiosité )
Euh si ca devrait marché, et ca aurai été surement plus simple d'exploiter le truc avec une telle modélisation.

Ceci étant dit pour un arbre généalogique je ne sais pas ce qui aurait été le mieux, si cinephil passe par là ....
punkoff 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 23h43.


 
 
 
 
Partenaires

Hébergement Web