Mysql
 sql >> Base de données >  >> RDS >> Mysql

Stockage des données hiérarchiques (MySQL) pour le marketing de référence

Tableau de clôture

ancestor_id  descendant_id  distance
    1            1              0
    2            2              0
    3            3              0
    4            4              0
    5            5              0
    6            6              0
    2            3              1

Pour ajouter l'utilisateur 10, référé par l'utilisateur 3. (Je ne pense pas il faut verrouiller le tableau entre ces deux insertions) :

insert into ancestor_table
select ancestor_id, 10, distance+1
from ancestor_table
where descendant_id=3;

insert into ancestor_table values (10,10,0);

Pour trouver tous les utilisateurs référés par l'utilisateur 3.

select descendant_id from ancestor_table where ancestor_id=3;

Pour compter ces utilisateurs par profondeur :

select distance, count(*) from ancestor_table where ancestor_id=3 group by distance;

Pour trouver les ancêtres de l'utilisateur 10.

select ancestor_id, distance from ancestor_table where descendant_id=10;

L'inconvénient de cette méthode est la quantité d'espace de stockage que cette table prendra.