Bonjour,
J'utilise la version 11 de postgresql.
Je veux obtenir la liste des collèges dont le parentid est nul et pour chacun obtenir la liste de tous ses enfants avec toutes les informations (identifiant, nom et numéro préféré).
ce qui signifie par exemple si on a 3 collèges avec parentid null comme celui-ci
et si collège 1 a deux enfants et collège 2 a un enfant et collège 3 a trois enfants
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 college1 : (id : B1 , name : college1 , favoriteNbr: 1 ) college2 : (id : B2 , name : college2 , favoriteNbr: 8 ) college3 : (id : B3 , name : college3 , favoriteNbr: 5 )
le résultat final devrai être comme celle ci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 B1,college1,1 --> B01,college01,0 --> B001,college001,1 B2,college2,8 --> B02,college02,3 B3,college3,5 --> B03,college03,1 --> B003,college003,4 --> B0003,college0003,1
seulement 3 lignes (le college qui a le parent null c'est a dire niveau 1 avec tous ces enfants)
J'essaie avec cette requête sans succès
cette requête affiche tous les collèges (9 collèges) et affiche pour chacun le chemin comme celui-ci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 with recursive nodes as ( select college.id AS value, CAST(collegeL.name AS varchar) AS text,cast (ARRAY[college.id,collegeL.name, cast((select count(*) from favorite fav where fav.id_college_favorite = college.id and fav.id_emp = 'EM-1') as varchar(10) )] as TEXT ) as parents,college.app_order, cast((select count(*) from favorite fav where fav.id_college_favorite = college.id and fav.id_emp = 'EM-1') as varchar(10) ) as favoriteNbr FROM public.college college LEFT OUTER JOIN public.collegeLang collegeL ON collegeL.college_id = college.id Where college.status ='1' and parentid is null and college.categ ='C' union all select o.id AS value, CAST(collegeL.name AS varchar) AS text ,parents || '->' || cast (ARRAY[o.id,collegeL.name, cast((select count(*) from favorite fav where fav.id_college_favorite = o.id and fav.id_emp = 'EM-1') as varchar(10) )] as TEXT ),o.app_order , cast((select count(*) from favorite fav where fav.id_college_favorite = o.id and fav.id_emp = 'EM-1') as varchar(10) ) as favoriteNbr FROM college o join nodes n on n.value = o.parentid LEFT OUTER JOIN collegeLang collegeL ON collegeL.college_id = o.id where o.status ='1' and o.categ !='M' ) select CAST(text AS varchar) as text,value as value, parents as children,favoriteNbr from nodes order by app_order asc
merci d'avance pour vos aides
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 B1,college1,1 B1,college1,1 B2,college2,8 B2,college2,8 B3,college3,5 B3,college3,5 B01,college01,0 B1,college1,1 --> B01,college01,0 B02,college02,3 B2,college2,8 --> B02,college02,3 B03,college03,1 B3,college3,5 --> B03,college03,1 B001,college001,1 B1,college1,1 --> B01,college01,0 --> B001,college001,1 B003,college003,4 B3,college3,5 --> B03,college03,1 --> B003,college003,4 B0003,college0003,1 B3,college3,5 --> B03,college03,1 --> B003,college003,4 --> B0003,college0003,1
Partager