sql >> データベース >  >> RDS >> Mysql

リファラルマーケティングのための階層データ(MySQL)の保存

    クロージャーテーブル

    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
    

    ユーザー10を追加するには、ユーザー3によって参照されます(私は考えていません これらの2つの挿入の間にテーブルをロックする必要があります):

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

    ユーザー3によって参照されたすべてのユーザーを検索します。

    select descendant_id from ancestor_table where ancestor_id=3;
    

    それらのユーザーを深さでカウントするには:

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

    ユーザー10の祖先を見つけるには。

    select ancestor_id, distance from ancestor_table where descendant_id=10;
    

    この方法の欠点は、このテーブルに必要なストレージスペースの量です。



    1. JPA Qyeryは、範囲間のレコードを検索します

    2. ハイチャート-JSONデータの表示-MYSQL/PHP

    3. dblinkを介したOracleSQLタイプ

    4. 自動車教習所の予約システムのデータベースモデル。パート2