Bonjour,
Please, aidez moi. Tout ce qui m'intéresse c'est de connaître la requête pour calculer le nombre de tous les membres d'une descendance qui va jusqu'au cinquième niveau dans un arbre intervallaire et l'afficher. merci.
Bonjour,
Please, aidez moi. Tout ce qui m'intéresse c'est de connaître la requête pour calculer le nombre de tous les membres d'une descendance qui va jusqu'au cinquième niveau dans un arbre intervallaire et l'afficher. merci.
Fort bien mais où est la description de votre table et la requête que vous avez essayée ?
A noter : si votre version MySQL est antérieure à la V8, vous ne pourrez pas faire de requête récursive
A +
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT COUNT(*) FROM Matable WHERE BORNE_GAUCHE > valeur_borne_gauche_ancetre AND BORNE_DROITE < valeur_borne_droite_ancetre AND NIVEAU >= niveau_ancetre + 5
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE `membres` ( `id` int(11) NOT NULL, `identite` varchar(255) NOT NULL, `idparrain` int(11) NOT NULL, `telephone` varchar(255) NOT NULL, `mail` varchar(255) NOT NULL, `province` varchar(255) NOT NULL, `vdd` varchar(255) NOT NULL, `ddd` date NOT NULL, `mdt` varchar(255) NOT NULL, `mdp` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Au fait, la colonne id est soumise à celle de idparrain. J'aimerai afficher sur une interface web, le nombre de tous les descendants d'un id, à différents niveau, sur sa page de profil. Ce qui m'embête c'est le calcul de toute la descendance. Merci.
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 INSERT INTO `membres` (`id`, `identite`, `idparrain`, `telephone`, `mail`, `province`, `vdd`, `ddd`, `mdt`, `mdp`) VALUES (7, 'Georges', 2, '(+243)903452198', 'georges@yahoo.fr', 'Kongo Central', '100$', '2018-07-19', 'Mpesa', '2453f80431877254016377c5e36e49046aec3d80'), (8, 'Sevi Vingu', 7, '(+243)978374637', 'sevi@tozaa.net', 'Kinshasa', '100$', '2018-07-12', 'Airtel Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (9, 'Alex', 7, '(+243)821307485', 'alex@voila.fr', 'Equateur', '10$', '2018-07-12', 'Airtel Money', '2453f80431877254016377c5e36e49046aec3d80'), (10, 'Bob', 7, '(+243)814658204', 'bob@voici.fr', 'Kasai Oriental', '10$', '2018-07-28', 'Orange Money', '2453f80431877254016377c5e36e49046aec3d80'), (11, 'Annie', 7, '(+243)907070443', 'annie@caramail.com', 'Kinshasa', '100$', '2018-07-04', 'Airtel Money', '2453f80431877254016377c5e36e49046aec3d80'), (12, 'Dwayne', 0, '(+243)837028746', 'dwayne@yahoo.fr', 'Equateur', '10$', '2018-07-27', 'Airtel Money', '2453f80431877254016377c5e36e49046aec3d80'), (14, 'Patrick Bitafu Sabu', 27, '00822156182', 'patrickbibu@gmail.com', 'Kinshasa', '1000', '2018-07-22', 'Mpesa', 'ffd6c8edba114c86c1130600feac0e3eb11d5661'), (15, 'Mbuyi kaba', 14, '(+243)821307485', 'aaron@yahoo.fr', 'Kinshasa', '1000', '2018-07-21', 'Mpesa', 'c60a535544b1c1fcf05fab35d7f33aa8dbcd0cb3'), (16, 'Korzo Barni Clavis', 15, '+44512223489', 'lixcor@gmail.com', 'Kinshasa', '1000', '2018-07-22', 'Mpesa', '549a53d9060d1e3bd995a8d7a9ed451dbed90c71'), (17, 'Korzo Barni Vilenia', 14, '+44512223489', 'lixcordabi@gmail.com', 'Kinshasa', '1000', '2018-07-22', 'Airtel Money', 'fea4e1eb91d28b1544a362c085c3e9d2fb4273d1'), (18, 'Malik', 8, '08114278309', 'malik@gmail.com', 'Kinshasa', '10$', '2018-09-09', 'Mpesa', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (19, 'Hussein', 18, '0972123456', 'hussein@gmail.com', 'Equateur', '10$', '2018-09-10', 'Airtel Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (20, 'Hassan', 18, '0986543456', 'hassan@gmail.com', 'Province Orientale', '10$', '2018-09-11', 'Airtel Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (21, 'Ahmed', 19, '0825647389', 'ahmed@gmail.com', 'Nord Kivu', '10$', '2018-09-12', 'Orange Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (22, 'Andrew', 19, '0374976372', 'andrew@gmail.com', 'Bandundu', '10$', '2018-09-05', 'Airtel Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (23, 'Talent', 18, '0938403647', 'talent@gmail.com', 'Kongo Central', '10$', '2018-09-05', 'Airtel Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (24, 'Pedro', 19, '03849393847', 'pedro@gmail.com', 'Kongo Central', '10$', '2018-09-06', 'Mpesa', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (25, 'Vingu', 18, '78909', 'vingu@gmail.com', 'Bandundu', '10$', '2018-09-20', 'Airtel Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (26, 'ngoma', 18, '93038', 'ngoma@gmail.com', 'Kasai Occidental', '10$', '2018-09-21', 'Orange Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (27, 'Lea', 18, '2930', 'lea@gmail.com', 'Province Orientale', '10$', '2018-09-20', 'Orange Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80');
Donc en fait, vous n'avez pas modélisé un arbre intervallaire, comme votre premier message le laissait supposer et là ça devient tout de suite beaucoup plus compliqué de calculer ça et la requête de SQLPro ne peut pas fonctionner avec votre structure.
Et comme vous n'avez pas la dernière version de MySQL, pas de requêtes récursives non plus.
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
En marge du sujet, c'est une drôle d'idée d'utiliser du varchar(255) pour tous les attributs chaine de caractères.
Le téléphone par exemple a peu de chance d'utiliser une telle longueur !
Sans compter que sauf cas particulier où le téléphone est obligatoire et unique pour une personne, il n'a rien à faire dans la table des personnes
La province en tout cas n'a à coup sur rien à faire dans la table des membres, il devrait y avoir une colonne FK permettant de faire le lien avec la table des provinces, et c'est cette table des provinces qui doit contenir un libellé !
Salut à tous.
Quelque chose dans ce genre là :
Fait sous MySql 8.0.12.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144 -------------- SET AUTOCOMMIT = 0 -------------- -------------- START TRANSACTION -------------- -------------- DROP DATABASE IF EXISTS `base` -------------- -------------- CREATE DATABASE `base` DEFAULT CHARACTER SET `latin1` DEFAULT COLLATE `latin1_general_ci` -------------- -------------- DROP TABLE IF EXISTS `membre` -------------- -------------- CREATE TABLE `membre` ( `id` integer unsigned NOT NULL auto_increment primary key, `identite` varchar(255) NOT NULL, `idparrain` integer unsigned NULL, `telephone` char(15) NOT NULL, `mail` char(24) NOT NULL, `province` char(20) NOT NULL, `vdd` char(04) NOT NULL, `ddd` date NOT NULL, `mdt` char(12) NOT NULL, `mdp` char(40) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci` ROW_FORMAT=COMPRESSED -------------- -------------- INSERT INTO `membre` (`id`,`identite`,`idparrain`,`telephone`,`mail`,`province`,`vdd`,`ddd`,`mdt`,`mdp`) VALUES ( 7, 'Georges', 2, '(+243)903452198', 'georges@yahoo.fr', 'Kongo Central', '100$', '2018-07-19', 'Mpesa', '2453f80431877254016377c5e36e49046aec3d80'), ( 8, 'Sevi Vingu', 7, '(+243)978374637', 'sevi@tozaa.net', 'Kinshasa', '100$', '2018-07-12', 'Airtel Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), ( 9, 'Alex', 7, '(+243)821307485', 'alex@voila.fr', 'Equateur', '10$', '2018-07-12', 'Airtel Money', '2453f80431877254016377c5e36e49046aec3d80'), (10, 'Bob', 7, '(+243)814658204', 'bob@voici.fr', 'Kasai Oriental', '10$', '2018-07-28', 'Orange Money', '2453f80431877254016377c5e36e49046aec3d80'), (11, 'Annie', 7, '(+243)907070443', 'annie@caramail.com', 'Kinshasa', '100$', '2018-07-04', 'Airtel Money', '2453f80431877254016377c5e36e49046aec3d80'), (12, 'Dwayne', 0, '(+243)837028746', 'dwayne@yahoo.fr', 'Equateur', '10$', '2018-07-27', 'Airtel Money', '2453f80431877254016377c5e36e49046aec3d80'), (14, 'Patrick Bitafu Sabu', 27, '00822156182', 'patrickbibu@gmail.com', 'Kinshasa', '1000', '2018-07-22', 'Mpesa', 'ffd6c8edba114c86c1130600feac0e3eb11d5661'), (15, 'Mbuyi kaba', 14, '(+243)821307485', 'aaron@yahoo.fr', 'Kinshasa', '1000', '2018-07-21', 'Mpesa', 'c60a535544b1c1fcf05fab35d7f33aa8dbcd0cb3'), (16, 'Korzo Barni Clavis', 15, '+44512223489', 'lixcor@gmail.com', 'Kinshasa', '1000', '2018-07-22', 'Mpesa', '549a53d9060d1e3bd995a8d7a9ed451dbed90c71'), (17, 'Korzo Barni Vilenia', 14, '+44512223489', 'lixcordabi@gmail.com', 'Kinshasa', '1000', '2018-07-22', 'Airtel Money', 'fea4e1eb91d28b1544a362c085c3e9d2fb4273d1'), (18, 'Malik', 8, '08114278309', 'malik@gmail.com', 'Kinshasa', '10$', '2018-09-09', 'Mpesa', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (19, 'Hussein', 18, '0972123456', 'hussein@gmail.com', 'Equateur', '10$', '2018-09-10', 'Airtel Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (20, 'Hassan', 18, '0986543456', 'hassan@gmail.com', 'Province Orientale', '10$', '2018-09-11', 'Airtel Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (21, 'Ahmed', 19, '0825647389', 'ahmed@gmail.com', 'Nord Kivu', '10$', '2018-09-12', 'Orange Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (22, 'Andrew', 19, '0374976372', 'andrew@gmail.com', 'Bandundu', '10$', '2018-09-05', 'Airtel Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (23, 'Talent', 18, '0938403647', 'talent@gmail.com', 'Kongo Central', '10$', '2018-09-05', 'Airtel Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (24, 'Pedro', 19, '03849393847', 'pedro@gmail.com', 'Kongo Central', '10$', '2018-09-06', 'Mpesa', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (25, 'Vingu', 18, '78909', 'vingu@gmail.com', 'Bandundu', '10$', '2018-09-20', 'Airtel Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (26, 'ngoma', 18, '93038', 'ngoma@gmail.com', 'Kasai Occidental', '10$', '2018-09-21', 'Orange Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80'), (27, 'Lea', 18, '2930', 'lea@gmail.com', 'Province Orientale', '10$', '2018-09-20', 'Orange Money', '7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80') -------------- -------------- select * from `membre` -------------- +----+---------------------+-----------+-----------------+-----------------------+--------------------+------+------------+--------------+------------------------------------------+ | id | identite | idparrain | telephone | mail | province | vdd | ddd | mdt | mdp | +----+---------------------+-----------+-----------------+-----------------------+--------------------+------+------------+--------------+------------------------------------------+ | 7 | Georges | 2 | (+243)903452198 | georges@yahoo.fr | Kongo Central | 100$ | 2018-07-19 | Mpesa | 2453f80431877254016377c5e36e49046aec3d80 | | 8 | Sevi Vingu | 7 | (+243)978374637 | sevi@tozaa.net | Kinshasa | 100$ | 2018-07-12 | Airtel Money | 7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80 | | 9 | Alex | 7 | (+243)821307485 | alex@voila.fr | Equateur | 10$ | 2018-07-12 | Airtel Money | 2453f80431877254016377c5e36e49046aec3d80 | | 10 | Bob | 7 | (+243)814658204 | bob@voici.fr | Kasai Oriental | 10$ | 2018-07-28 | Orange Money | 2453f80431877254016377c5e36e49046aec3d80 | | 11 | Annie | 7 | (+243)907070443 | annie@caramail.com | Kinshasa | 100$ | 2018-07-04 | Airtel Money | 2453f80431877254016377c5e36e49046aec3d80 | | 12 | Dwayne | 0 | (+243)837028746 | dwayne@yahoo.fr | Equateur | 10$ | 2018-07-27 | Airtel Money | 2453f80431877254016377c5e36e49046aec3d80 | | 14 | Patrick Bitafu Sabu | 27 | 00822156182 | patrickbibu@gmail.com | Kinshasa | 1000 | 2018-07-22 | Mpesa | ffd6c8edba114c86c1130600feac0e3eb11d5661 | | 15 | Mbuyi kaba | 14 | (+243)821307485 | aaron@yahoo.fr | Kinshasa | 1000 | 2018-07-21 | Mpesa | c60a535544b1c1fcf05fab35d7f33aa8dbcd0cb3 | | 16 | Korzo Barni Clavis | 15 | +44512223489 | lixcor@gmail.com | Kinshasa | 1000 | 2018-07-22 | Mpesa | 549a53d9060d1e3bd995a8d7a9ed451dbed90c71 | | 17 | Korzo Barni Vilenia | 14 | +44512223489 | lixcordabi@gmail.com | Kinshasa | 1000 | 2018-07-22 | Airtel Money | fea4e1eb91d28b1544a362c085c3e9d2fb4273d1 | | 18 | Malik | 8 | 08114278309 | malik@gmail.com | Kinshasa | 10$ | 2018-09-09 | Mpesa | 7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80 | | 19 | Hussein | 18 | 0972123456 | hussein@gmail.com | Equateur | 10$ | 2018-09-10 | Airtel Money | 7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80 | | 20 | Hassan | 18 | 0986543456 | hassan@gmail.com | Province Orientale | 10$ | 2018-09-11 | Airtel Money | 7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80 | | 21 | Ahmed | 19 | 0825647389 | ahmed@gmail.com | Nord Kivu | 10$ | 2018-09-12 | Orange Money | 7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80 | | 22 | Andrew | 19 | 0374976372 | andrew@gmail.com | Bandundu | 10$ | 2018-09-05 | Airtel Money | 7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80 | | 23 | Talent | 18 | 0938403647 | talent@gmail.com | Kongo Central | 10$ | 2018-09-05 | Airtel Money | 7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80 | | 24 | Pedro | 19 | 03849393847 | pedro@gmail.com | Kongo Central | 10$ | 2018-09-06 | Mpesa | 7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80 | | 25 | Vingu | 18 | 78909 | vingu@gmail.com | Bandundu | 10$ | 2018-09-20 | Airtel Money | 7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80 | | 26 | ngoma | 18 | 93038 | ngoma@gmail.com | Kasai Occidental | 10$ | 2018-09-21 | Orange Money | 7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80 | | 27 | Lea | 18 | 2930 | lea@gmail.com | Province Orientale | 10$ | 2018-09-20 | Orange Money | 7e1e1d11c6d0585a2fbf1d02dbdd83dbea154e80 | +----+---------------------+-----------+-----------------+-----------------------+--------------------+------+------------+--------------+------------------------------------------+ -------------- with recursive cte (`id`, `idparrain`, `nbre`) as ( select id, idparrain, 0 as nbre from `membre` union all select cte.id, m.idparrain, 1 as nbre from `membre` as m inner join cte on m.id=cte.idparrain ) select id, sum(nbre) as qte from cte group by id -------------- +------+------+ | id | qte | +------+------+ | 7 | 0 | | 8 | 1 | | 9 | 1 | | 10 | 1 | | 11 | 1 | | 12 | 0 | | 14 | 4 | | 15 | 5 | | 16 | 6 | | 17 | 5 | | 18 | 2 | | 19 | 3 | | 20 | 3 | | 21 | 4 | | 22 | 4 | | 23 | 3 | | 24 | 4 | | 25 | 3 | | 26 | 3 | | 27 | 3 | +------+------+ -------------- COMMIT -------------- -------------- SET AUTOCOMMIT = 1 -------------- Appuyez sur une touche pour continuer...
@+
Si vous êtes de mon aide, vous pouvez cliquer sur .
Mon site : http://www.jcz.fr
Bonjour,
Artemus24 j'aimerai bien avoir la suite de votre enchaînement. Merci.
Bonjour,
Je suis pas sur de comprendre. Si je prends Patrick Bitafu Sabu (14) quel est le resultat que tu attends ?
je pense 3 car :
Mbuyi kaba et Korzo Barni Vilenia (15, 17) dependent de lui et Korzo Barni Clavis (16) car il depend de Mbuyi kaba. Est ce bien ca ?
Salut à tous.
@ sqllm : cette table est organisée sous forme arborescence. Il faut comprendre le lien suivant (id) <== (idparrain).
En partant de id, il n'y a qu'un et un seul chemin en remontant les liens dans l'arbre.
Un id n'a qu'un seul parrain, qui, ce parrain à aussi un seul parrain et ainsi de suite, et en remontant jusqu'à la racine.
Si vous prenez le cas de "Patrick Bitafu Sabu", ligne id=14, voici comment je l'ai traité :Envoyé par seviv
(14, 'Patrick Bitafu Sabu') <== (27, 'Lea') <== (18, 'Malik') <== (8, 'Sevi Vingu') <== (7, 'Georges').
Soit quatre descendants, car je compte que les flèches.
En regardant de plus près, la profondeur n'est pas de cinq, mais plutôt de six :
(16, 'Korzo Barni Clavis') <== (15, 'Mbuyi kaba') <== (14, 'Patrick Bitafu Sabu') <== (27, 'Lea') <== (18, 'Malik') <== ( 8, 'Sevi Vingu') <== ( 7, 'Georges').
En comptabilisant le nombre de flèche, on trouve 6 ! La racine n'existant pas n'est pas comptabilisée.
Soit cet autre exemple qui va plutôt dans votre interprétation :
Pour id=14, on trouve cette fois-ci 3.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 -------------- with recursive cte (`id`, `idparrain`, `nbre`) as ( select id, idparrain, 0 as nbre from `membre` union all select m.id, m.idparrain, 1 as nbre from `membre` as m inner join cte on m.id=cte.idparrain ) select id, sum(nbre) as qte from cte group by id -------------- +------+------+ | id | qte | +------+------+ | 7 | 18 | | 8 | 14 | | 9 | 0 | | 10 | 0 | | 11 | 0 | | 12 | 0 | | 14 | 3 | | 15 | 1 | | 16 | 0 | | 17 | 0 | | 18 | 13 | | 19 | 3 | | 20 | 0 | | 21 | 0 | | 22 | 0 | | 23 | 0 | | 24 | 0 | | 25 | 0 | | 26 | 0 | | 27 | 4 | +------+------+
Je ne comprends pas votre question. Tout est dit dans mon exemple.Envoyé par seviv
Pouvez-vous me confirmer que c'est bien le résultat que vous attendez ?
@+
Si vous êtes de mon aide, vous pouvez cliquer sur .
Mon site : http://www.jcz.fr
Merci Artemus24
En fait je profite du forum pour essayer de m'ameliorer ! les requetes recursives ne sont pas du tout naturelle pour moi
J'avais fait un recherche descendante car la colonne idparrain indique pour moi le superieur de la personne.
Ainsi
Mbuyi kaba a pour superieur Patrick Bitafu Sabu
Korzo Barni Vilenia a pour superieur Patrick Bitafu Sabu
et
Korzo Barni Clavis a pour superieur Mbuyi kaba
donc le nombre de descendants de Patrick Bitafu Sabu est de 3
Ceci dit, je comprends votre interpretation aussi
la requete que j'avais trouve (sql server) me semble donc equivalent a votre seconde version
avec comme resultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 with recur as ( select m1.id, m1.idparrain, 0 as niveau, m1.idparrain as debut from membres m1 where m1.idparrain <> 0 UNION ALL select m2.id, m2.idparrain, recur.niveau+1, recur.debut from membres m2 join recur on recur.id = m2.idparrain ) select recur.debut, COUNT(*) from recur group by recur.debut order by COUNT(*) desc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 debut (No column name) 2 19 7 18 8 14 18 13 27 4 19 3 14 3 15 1
A noter que Georges (7) depend d'un parrain inexistant !
Salut sqllm.
Vous n'êtes pas le seul.Envoyé par sqllm
Une requête récursive est une requête qui s'auto référence.Envoyé par sqllm
Où plus simplement, la boucle, ce sont les appels à la requête.
Il y a nécessairement un point d'entrée et une limite en profondeur.
Parrain est un lien qui normalement pointe vers une personne qui doit se trouver plus haut dans la hiérarchie des "id".Envoyé par sqllm
Il doit exister une racine, que l'on peut symboliser par "null".
Ou "nil" comme dans le langage LISP; qui vient du latin et signifie rien.
Il y a deux petites erreurs dans son arbre.
1) id=7 et id=12 pointent sur des lignes qui n'existent pas. Pourquoi ne pas mettre null à la place ?
2) chaque ligne qui est entrée doit faire référence à une ligne précédente.
Or id=14 pointe vers id=27 ??? Pas très logique comme référence puisqu'elle est après ==> idparrain > id.
J'ai mal interprété le sens de "descendance". En fait, j'ai calculé la profondeur entre les deux extrémités du chaînage.Envoyé par sqllm
Tout comme Dwayne (12), avec idParrain à 0.Envoyé par sqllm
@+
Si vous êtes de mon aide, vous pouvez cliquer sur .
Mon site : http://www.jcz.fr
la 2nd solution d'Artemus24 ainsi que la mienne repondent je pense a votre besoin. Cela calcule bien le nombre de descendants par idmembre
Ainsi pour l'id 14, nos 2 requetes renvoient 3.
Si cela ne convient pas, merci de preciser un exemple de resultat que vous souhaiteriez a l'aide du jeu d'essai que vous avez fourni.
Par ailleurs, comme precise plus haut votre jeu d'essai semble avoir des incoherences --> idparrain inexistants (0 devrait etre null et 2 inexistant)
Salut à tous.
La première solution calcul la profondeur des liens pour les ascendants.Envoyé par seviv
La seconde solution calcule le nombre de descendants. Sqllm et moi-même trouvons les mêmes résultats !
Si ce n'est pas ce que vous attendez, donnez nous un jeu d'essai avec le résultat que vous désirez.
@+
Si vous êtes de mon aide, vous pouvez cliquer sur .
Mon site : http://www.jcz.fr
Bonjour,
Je tiens à vous remercier énormément. Mais le problème que j'ai, c'est qu'à la fiche sql de mon phpmyadmin, lorsque je pose la requête avec la formule "with recursive cte", il signale une erreur de syntaxe sur la ligne.Puis je savoir ce qui ne va pas. Je tente d'exécuter le code à la page sql de la table "membre". Est ce là qu'il me faut le poser?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager