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 :

Compte et affichage de toute la descendance d'un noeud.


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Compte et affichage de toute la descendance d'un noeud.
    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.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    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

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    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
    A +
    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/ * * * * *

  4. #4
    Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut La présentation de ma table
    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;
    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');
    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.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    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 !

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    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é !

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous.

    Quelque chose dans ce genre là :
    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...
    Fait sous MySql 8.0.12.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #8
    Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Artemus24 j'aimerai bien avoir la suite de votre enchaînement. Merci.

  9. #9
    Membre régulier
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Mars 2016
    Messages : 58
    Points : 105
    Points
    105
    Par défaut
    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 ?

  10. #10
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    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.

    Citation Envoyé par seviv
    calculer le nombre de tous les membres d'une descendance qui va jusqu'au cinquième niveau
    Si vous prenez le cas de "Patrick Bitafu Sabu", ligne id=14, voici comment je l'ai traité :
    (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 :
    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 |
    +------+------+
    Pour id=14, on trouve cette fois-ci 3.

    Citation Envoyé par seviv
    j'aimerai bien avoir la suite de votre enchaînement. Merci.
    Je ne comprends pas votre question. Tout est dit dans mon exemple.

    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

  11. #11
    Membre régulier
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Mars 2016
    Messages : 58
    Points : 105
    Points
    105
    Par défaut
    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


    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
    avec comme resultat

    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 !

  12. #12
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut sqllm.

    Citation Envoyé par sqllm
    je profite du forum pour essayer de m'ameliorer !
    Vous n'êtes pas le seul.

    Citation Envoyé par sqllm
    les requêtes récursives ne sont pas du tout naturelle pour moi
    Une requête récursive est une requête qui s'auto référence.
    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.

    Citation Envoyé par sqllm
    la colonne idparrain indique pour moi le supérieur de la personne.
    Parrain est un lien qui normalement pointe vers une personne qui doit se trouver plus haut dans la hiérarchie des "id".
    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.

    Citation Envoyé par sqllm
    Ceci dit, je comprends votre interprétation aussi
    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.

    Citation Envoyé par sqllm
    A noter que Georges (7) depend d'un parrain inexistant !
    Tout comme Dwayne (12), avec idParrain à 0.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  13. #13
    Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Oui mon cher, c'est bien ça

    Citation Envoyé par sqllm Voir le message
    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 ?

  14. #14
    Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci Artemus24,
    Mais ce qui m'intéresse c'est le calcul du nombre des descendants et non des ascendants.

    Citation Envoyé par Artemus24 Voir le message
    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é :
    (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 :
    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 |
    +------+------+
    Pour id=14, on trouve cette fois-ci 3.


    Je ne comprends pas votre question. Tout est dit dans mon exemple.

    Pouvez-vous me confirmer que c'est bien le résultat que vous attendez ?

    @+

  15. #15
    Membre régulier
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Mars 2016
    Messages : 58
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par seviv Voir le message
    Merci Artemus24,
    Mais ce qui m'intéresse c'est le calcul du nombre des descendants et non des ascendants.
    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)

  16. #16
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous.

    Citation Envoyé par seviv
    Mais ce qui m'intéresse c'est le calcul du nombre des descendants et non des ascendants.
    La première solution calcul la profondeur des liens pour les ascendants.
    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

  17. #17
    Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    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?

    Citation Envoyé par seviv Voir le message
    Merci Artemus24,
    Mais ce qui m'intéresse c'est le calcul du nombre des descendants et non des ascendants.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Comptes Utilisateurs] Affichage classique
    Par DarkOcean dans le forum Windows XP
    Réponses: 15
    Dernier message: 03/08/2009, 16h59
  2. [Conception] Affichage de toutes les infos de la BD
    Par arti2004 dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 10/07/2006, 09h58
  3. Affichage de tout le code du Form
    Par Cantalou dans le forum Access
    Réponses: 1
    Dernier message: 26/06/2006, 13h34
  4. Réponses: 2
    Dernier message: 01/11/2005, 10h03
  5. [CR.NET] affichage de toute les pages de l'état
    Par HULK dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 19/01/2005, 17h34

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