sql >> Base de Datos >  >> RDS >> Mysql

Almacenamiento de datos jerárquicos (MySQL) para marketing de referencia

Mesa de Cierre

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

Para agregar el usuario 10, referido por el usuario 3. (No creo necesita bloquear la tabla entre estas dos inserciones):

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

Para encontrar todos los usuarios referidos por el usuario 3.

select descendant_id from ancestor_table where ancestor_id=3;

Para contar esos usuarios por profundidad:

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

Para encontrar los antepasados ​​del usuario 10.

select ancestor_id, distance from ancestor_table where descendant_id=10;

El inconveniente de este método es la cantidad de espacio de almacenamiento que ocupará esta tabla.