sql >> Databáze >  >> RDS >> Mysql

Ukládání hierarchických dat (MySQL) pro marketing doporučení

Uzavírací tabulka

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

Chcete-li přidat uživatele 10, na kterého odkazuje uživatel 3. (Nemyslím si to musíte uzamknout tabulku mezi těmito dvěma vloženími):

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

Chcete-li najít všechny uživatele doporučené uživatelem 3.

select descendant_id from ancestor_table where ancestor_id=3;

Počítání těchto uživatelů podle hloubky:

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

Chcete-li najít předky uživatele 10.

select ancestor_id, distance from ancestor_table where descendant_id=10;

Nevýhodou této metody je množství úložného prostoru, který tento stůl zabere.



  1. Heroku psql:FATAL:zbývající připojovací sloty jsou vyhrazeny pro nereplikační připojení superuživatele

  2. PHP PDO vs normální mysql_connect

  3. Sloučit souvislé řádky pomocí Postgresql

  4. Jak zabezpečit funkci resetování hesla codeiginter?