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.