sql >> Database >  >> RDS >> Mysql

Hiërarchische gegevens (MySQL) opslaan voor verwijzingsmarketing

Sluitingstabel

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

Om gebruiker 10 toe te voegen, verwezen door gebruiker 3. (Ik denk het niet je moet de tafel tussen deze twee invoegingen vergrendelen):

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);

Om alle gebruikers te vinden die door gebruiker 3 zijn doorverwezen.

select descendant_id from ancestor_table where ancestor_id=3;

Om die gebruikers op diepte te tellen:

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

Om de voorouders van gebruiker 10 te vinden.

select ancestor_id, distance from ancestor_table where descendant_id=10;

Het nadeel van deze methode is de hoeveelheid opslagruimte die deze tafel in beslag neemt.



  1. Juiste Hibernate id-generator voor postgres seriële/bigserial kolom?

  2. Hoe gebruiker in Superuser te veranderen in PostgreSQL

  3. Hoe kunnen miljoenen statistische records efficiënt worden opgeslagen?

  4. Mysql:bezoekfrequentie berekenen