Mysql
 sql >> Database >  >> RDS >> Mysql

Memorizzazione dei dati gerarchici (MySQL) per il marketing di riferimento

Tabella di chiusura

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

Per aggiungere l'utente 10, riferito dall'utente 3. (Non credo devi bloccare la tabella tra questi due inserimenti):

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

Per trovare tutti gli utenti indirizzati dall'utente 3.

select descendant_id from ancestor_table where ancestor_id=3;

Per contare quegli utenti in base alla profondità:

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

Per trovare gli antenati dell'utente 10.

select ancestor_id, distance from ancestor_table where descendant_id=10;

Lo svantaggio di questo metodo è la quantità di spazio di archiviazione che occuperà questa tabella.