image image image
Introduction au développement en couche
Le déclin de l'informatique au Qc
Devenir un développeur Freelance
Introduction au développement en couche En entreprise, les logiciels les plus fréquemment développés sont des interfaces utilisateurs permettant la gestion d'un ensemble de données tel que les données clients d'une entreprise. Ils veulent pouvoir ajouter, supprimer et modifier les informations de leurs clients. Une base de données permet de stocker leur information.
  Plus ...
Le déclin de l'informatique au Qc Les années 1990 ont connu une fulgurante explosion dans tous les domaines se rapportant à l'informatique et aux nouvelles technologies. Dans ces années, on pouvait voir une quantité phénoménale d'étudiants en informatique qui cherchait à faire fortune dans un domaine en plein essor. La diversité des emplois et le nombre de postes disponibles étaient en constante augmentation.

Plus ...
Devenir un développeur Freelance Avez-vous déjà rêvé d'être un développeur web indépendant; Freelance ? Que vous travailliez pour quelqu'un ou que vous développez pour le plaisir, il y a quelques trucs et conseils que vous pouvez utiliser pour vous faciliter la vie en tant que développeur web indépendant même si vous ne le faites qu'à temps partiel.

Plus ...
Mercredi Mars 17 , 2010
TEXT_SIZE
   

Tutoriaux

Générer la hiérarchie d'une donnée dans une table récursive SQL

Vous avez déjà rencontré des tables récursives en SQL ? C'est-à-dire, des tables qui pointent sur elle-même! Pour parcourir ce genre de table, il ne suffit pas d'un simple SELECT. Il vous faut un peu plus! Il existe quelques manières différentes afin de parcourir l'"arbre" de cette table.
 
Voyons une de ces méthodes. Tout d'abord pour parcourir votre arbre, il vous faut un point de départ au processus de récursion. Cela doit se faire avec 2 requêtes liées. La 1re requête indique où l'on doit commencer et la seconde où l'on doit se rendre ensuite. Ces 2 requêtes doivent être jointes par l'opérateur UNION ALL. Par la suite, il vous faudra effectuer une corrélation entre l'expression de requête CTE et le code SQL en référençant l'alias de requête à l'intérieur du code SQL exprimant la CTE.

Voyons un exemple de table concret. Celle-ci contient les champs ci-dessous :
NiveauId INTEGER PRIMARY KEY
Desc NVARCHAR(50)
fkNiveauParent INTEGER FOREIGN KEY
Compagnie XYZ
|-- Division XYZ
|   |-- Département 1
|   |-- Département 2
|   |   |-- Poste X
|-- Division XYW
|   |-- Département 6
|   |   |-- Poste U
|   |   |-- Poste W
La hiérarchie est représentée grâce à une auto-référence. C'est-à-dire qu'on a inséré une clé étrangère dans notre table en provenance de la clé même de la table. En d'autres mots, la clé étrangère, pointe sur la clé primaire de notre table. Donc pour obtenir la hiérarchie il faut commencer par déterminer notre point de départ. Ici, nous désirons obtenir la hiérarchie du "Poste X".
SELECT Desc, fkNiveauParent FROM maTableNiveau WHERE Desc = "Poste X"
Pour avancer dans notre arbre, il nous faut alors récupérer l'identifiant du père (fkNiveauParent) et lier les 2 requêtes grâce à l'UNION ALL.
UNION ALL
SELECT Desc, fkNiveauParent FROM maTableNiveau

Nous obtenons donc :
SELECT Desc, fkNiveauParent FROM maTableNiveau WHERE Desc = "Poste X"
UNION ALL
SELECT Desc, fkNiveauParent FROM maTableNiveau

Bâtissons  maintenant la CTE :
WITH tree (desc, id) AS(
    SELECT Desc, fkNiveauParent FROM maTableNiveau WHERE Desc = "Poste X"
    UNION ALL
    SELECT Desc, fkNiveauParent FROM maTableNiveau
)
Nous sommes maintenant prêts à faire la récursion. L'étape suivante consiste à effectuer le cycle de récursion. Cela se fait en référençant le nom de notre CTE ici "tree" à l'intérieur même de l'expression. Pour ce faire, dans la seconde requête de notre expression, nous devons effectuer une jointure entre la table "tree" et notre table "maTableNiveau" et assurer le chaînage par une jointure entre les identifiants "tree.id" et "NiveauId".
WITH tree (desc, id) AS(
    SELECT Desc, fkNiveauParent FROM maTableNiveau WHERE Desc = "Poste X"
    UNION ALL
    SELECT Desc, fkNiveauParent FROM maTableNiveau monAlias
    INNER JOIN tree ON tree.id = monAlias.NiveauId
) SELECT * FROM tree

Et voilà, le tour est joué vous obtiendrez la hiérarchie  du "Poste X".
data            id
--------------- ---
Poste X          8
Département 2    6
Division XYZ     3
Compagnie XYZ    NULL

Commentaires (1)Add Comment
Comment afficher la première liste ?
Par Gerald , septembre 17, 2009
Bonjour,
J'ai créé sans y prendre garde une table de ce type. Or à present j'aimerais afficher EXACTEMENT votre première liste :
Compagnie XYZ
|-- Division XYZ
| |-- Département 1
| |-- Département 2
| | |-- Poste X
|-- Division XYW
| |-- Département 6
| | |-- Poste U
| | |-- Poste W

mais j'ignore comment faire ça en PHP SQL...

Ecrivez un commentaire
Réduire l'éditeur | Agrandir l'éditeur

busy

Réseaux sociaux

Add this page to Blinklist Add this page to Del.icoi.us Add this page to Digg Add this page to Facebook Add this page to Furl Add this page to Google Add this page to Ma.Gnolia Add this page to Newsvine Add this page to Reddit Add this page to StumbleUpon Add this page to Technorati Add this page to Yahoo

Connexion

Publicités

Services offerts

image

Développement Web

Que ce soit pour faire la conception d'un site Web ou pour la refonte d'un site existant, nous avons la solution.

La création et la conception Web sont au cœur de nos activités. Chaque concept et création sont différents, et chaque client est unique. Rien n’est laissé au hasard pour faire de votre création multimédia un outil unique de promotion.

image

Développement Windows

Quel que soit votre projet, nous pouvons le réaliser pour vous !

Grâce à notre expertise en programmation, nous sommes en mesure de concevoir une variété d’applications qui pourront vous permettre d’augmenter votre clientèle, de la fidéliser ou encore de réduire vos coûts d’opération ! Nos critères élevés de contrôle de qualité ainsi que la grande expertise de nos programmeurs et de nos chargés de projets contribuent au succès des mandats qui nous sont confiés.

image

Base de données

...
image

Autres

Quel que soit vos projets ou vos idées, contactez nous!

Grâce à notre expérience et notre expertise en informatique, nous serons en mesure d'évaluer vos projets et nous pourrons trouver une solution à vos problèmes. Que ce soit de la programmation ou de la base de données ou bien tout autres problèmes informatiques, contactez nous, nous serons là pour vous.