Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Speichern hierarchischer Daten (MySQL) für Empfehlungsmarketing

Abschlusstabelle

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

Um Benutzer 10 hinzuzufügen, der von Benutzer 3 empfohlen wurde. (Ich glaube nicht Sie müssen die Tabelle zwischen diesen beiden Einfügungen sperren):

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

Um alle Benutzer zu finden, die von Benutzer 3 verwiesen wurden.

select descendant_id from ancestor_table where ancestor_id=3;

So zählen Sie diese Benutzer nach Tiefe:

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

So finden Sie die Vorfahren von Benutzer 10.

select ancestor_id, distance from ancestor_table where descendant_id=10;

Der Nachteil dieser Methode ist der Speicherplatz, den diese Tabelle benötigt.