Я читаю эту ссылку управление иерархическими данными в 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`)
)
Пожалуйста, помогите мне заранее спасибо.
Попробуйте удалить «and parent.parent.id = 1» в запросе. Данные представляют собой вложенное множество a.k.a celko tree.
Лучше всего сначала прочитать статью Джо Селко оДеревья в SQL«и теория вложенных множеств в целом (Википедия делает разумную работу:»Модель вложенного множества«). Требуется немного практики и размышлений, чтобы справиться с этим.
Первое, что вы, по-видимому, неправильно понимаете, это то, что левые / правые значения не относятся к ключевым значениям, они являются абсолютно отдельными сущностями. То, что они делают, — во взаимодействии друг с другом — отражают иерархию данных.
Левые / правые значения узла определяют границы левого / правого значений его дочерних узлов. Взяв пример кода в качестве примера: Flash
является потомком MP3 Players
как его левый / правый оба попадают в диапазон, определенный MP3 Player's
лево право. Simialrly все последующие узлы являются потомками Electronics
, поскольку все их левые / правые значения находятся в пределах его левого / правого диапазона.
И наоборот, предком данного узла является тот, чьи левые / правые значения полностью падают с рассматриваемого левого / правого узла. Electronics
является предком Flash
потому что диапазон 1-20 находится вне (или окружающий) диапазон 12-13.
Узел, который имеет соседние левые / правые значения — как Flash
— неявно не имеет потомков: в его диапазоне нет ширины для потомков.
Вложенные наборы очень быстро выбирают всех предков или всех потомков, но не настолько хороши при поиске ближайших родителей, детей или братьев и сестер. С этой целью иногда также полезно включить parent
значение, которое обозначает Я БЫ родительского узла. Таким образом, у нас есть гибридная модель списка вложенных множеств / смежности. Существует больше накладных расходов на поддержание дерева (C_UD, а не операции R), но в веб-среде считывает избыточные записи на порядки, так что это обычно нормально.
Ваша основная проблема, кажется, вы думаете, left
/right
значения относятся к записи ID
ценности, которых у них нет.
Пойдите, прочитайте те статьи, и сделайте некоторую проверку документов с вашими данными, и это должно начать иметь смысл. Это не совсем прямо вперед, так что дайте себе немного времени.
Однако есть одно предостережение от использования вложенных наборов: понимание того, как отражается иерархия, является лишь ее частью. Вы также должны понимать операции, необходимые для чтения предков, потомков, родителей, детей, братьев и сестер; и ты также нужно понимать алгоритмы, необходимые для добавления / обновления / удаления узлов. Они нетривиальны и требуют дальнейшего прочтения. Но объяснения этого выходят за рамки этого вопроса.