sql >> Databasteknik >  >> RDS >> Mysql

Lagring av hierarkisk data (MySQL) för referensmarknadsföring

Stängningstabell

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

För att lägga till användare 10, hänvisad av användare 3. (Jag tror inte du måste låsa tabellen mellan dessa två insättningar):

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

För att hitta alla användare som hänvisats av användare 3.

select descendant_id from ancestor_table where ancestor_id=3;

Så här räknar du dessa användare efter djup:

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

För att hitta förfäder till användare 10.

select ancestor_id, distance from ancestor_table where descendant_id=10;

Nackdelen med denna metod är mängden lagringsutrymme som denna tabell tar.



  1. Postgres VÄLJ där WHERE är UUID eller sträng

  2. Finns det ett Spring Batch 3-uppgraderingsskript för MySQL?

  3. fel:ORA-65096:ogiltigt vanligt användar- eller rollnamn i Oracle

  4. Språk översätt grammatik