Я запутался в управлении иерархическими данными в MySQL

Я читаю эту ссылку управление иерархическими данными в MySQL потому что я делаю проект MLM. Пример показывает это.

введите описание изображения здесь

но я в замешательстве в лфте и ргт. Я хочу поставить идентификаторы моих участников, которые зарегистрированы в MLM. Я просто следовал примеру примера в управлении иерархическими данными в MySQL.

как-то так. Значения lft и rgt — это идентификаторы моих зарегистрированных членов.

tree_table

id    parentid         lft       rgt

1        1              2         3

2        3              4          5

3        4              6           7

4        7              8           9

Я запускаю этот SQL

 SELECT node.parentid,node.lft,node.rgt
FROM tree_table AS node,
tree_table AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND parent.parentid = '1'
ORDER BY node.lft;

но он дает мне только 1 запись, он не показывает всех своих детей или downlines. есть выход

 parentid   lft   rgt
1         2     3

вот моя таблица структуры

CREATE TABLE `tree_table` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`parentid` INT(11) NOT NULL DEFAULT '0',
`lft` INT(11) NOT NULL DEFAULT '0',
`rgt` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)

Пожалуйста, помогите мне заранее спасибо.

0

Решение

Попробуйте удалить «and parent.parent.id = 1» в запросе. Данные представляют собой вложенное множество a.k.a celko tree.

0

Другие решения

Лучше всего сначала прочитать статью Джо Селко оДеревья в SQL«и теория вложенных множеств в целом (Википедия делает разумную работу:»Модель вложенного множества«). Требуется немного практики и размышлений, чтобы справиться с этим.

Первое, что вы, по-видимому, неправильно понимаете, это то, что левые / правые значения не относятся к ключевым значениям, они являются абсолютно отдельными сущностями. То, что они делают, — во взаимодействии друг с другом — отражают иерархию данных.

Левые / правые значения узла определяют границы левого / правого значений его дочерних узлов. Взяв пример кода в качестве примера: Flash является потомком MP3 Players как его левый / правый оба попадают в диапазон, определенный MP3 Player's лево право. Simialrly все последующие узлы являются потомками Electronics, поскольку все их левые / правые значения находятся в пределах его левого / правого диапазона.

И наоборот, предком данного узла является тот, чьи левые / правые значения полностью падают с рассматриваемого левого / правого узла. Electronics является предком Flash потому что диапазон 1-20 находится вне (или окружающий) диапазон 12-13.

Узел, который имеет соседние левые / правые значения — как Flash — неявно не имеет потомков: в его диапазоне нет ширины для потомков.

Вложенные наборы очень быстро выбирают всех предков или всех потомков, но не настолько хороши при поиске ближайших родителей, детей или братьев и сестер. С этой целью иногда также полезно включить parent значение, которое обозначает Я БЫ родительского узла. Таким образом, у нас есть гибридная модель списка вложенных множеств / смежности. Существует больше накладных расходов на поддержание дерева (C_UD, а не операции R), но в веб-среде считывает избыточные записи на порядки, так что это обычно нормально.

Ваша основная проблема, кажется, вы думаете, left/right значения относятся к записи ID ценности, которых у них нет.

Пойдите, прочитайте те статьи, и сделайте некоторую проверку документов с вашими данными, и это должно начать иметь смысл. Это не совсем прямо вперед, так что дайте себе немного времени.

Однако есть одно предостережение от использования вложенных наборов: понимание того, как отражается иерархия, является лишь ее частью. Вы также должны понимать операции, необходимые для чтения предков, потомков, родителей, детей, братьев и сестер; и ты также нужно понимать алгоритмы, необходимые для добавления / обновления / удаления узлов. Они нетривиальны и требуют дальнейшего прочтения. Но объяснения этого выходят за рамки этого вопроса.

0

По вопросам рекламы [email protected]