Mysql
 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. (Не мисля трябва да заключите таблицата между тези две вмъквания):

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Въпросителен знак за избягване на PHP PDO, така че да не мисли, че е заместител

  2. mysql чувствителни към малки и главни букви имена на таблици в заявки

  3. Как да инсталирам пакета MySQLdb? (ImportError:Няма модул с име setuptools)

  4. Как да вмъкна BLOB и CLOB файлове в MySQL?

  5. Урок за MySQL:MySQL IN изявление (разширено)