Допустим, у меня есть следующий MySQL структуру:Каков правильный запрос на получение всех детей в дереве?
CREATE TABLE `domains` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`domain` CHAR(50) NOT NULL,
`parent` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MYISAM AUTO_INCREMENT=10 DEFAULT CHARSET=latin1
insert into `domains`(`id`,`domain`,`parent`) values (1,'.com',0);
insert into `domains`(`id`,`domain`,`parent`) values (2,'example.com',1);
insert into `domains`(`id`,`domain`,`parent`) values (3,'sub1.example.com',2);
insert into `domains`(`id`,`domain`,`parent`) values (4,'sub2.example.com',2);
insert into `domains`(`id`,`domain`,`parent`) values (5,'s1.sub1.example.com',3);
insert into `domains`(`id`,`domain`,`parent`) values (6,'s2.sub1.example.com',3);
insert into `domains`(`id`,`domain`,`parent`) values (7,'sx1.s1.sub1.example.com',5);
insert into `domains`(`id`,`domain`,`parent`) values (8,'sx2.s2.sub1.example.com',6);
insert into `domains`(`id`,`domain`,`parent`) values (9,'x.sub2.example.com',4);
В моей голове, что достаточно, чтобы эмулировать простую структуру дерева:
.com
|
example
/ \
sub1 sub2
ЭСТ
Моя проблема заключается в том, что дать SUB1. example.com Я хочу знать всех дочерних элементов sub1.example.com без использования нескольких запросов в моем коде.
Я попытался подключиться к таблице и попытался использовать подзапросы, я не могу думать ни о чем, что покажет всех детей.
На работе мы используем MPTT, чтобы сохранить в иерархическом порядке список доменов/поддоменов, однако я считаю, что есть более простой способ сделать это.
Я сделал некоторые копания, и кто-то сделал что-то подобное, но они потребовали использования функции в MySQL. Я не думаю, что для чего-то простого подобного нам нужна целая функция.
Возможно, я просто тупой и не вижу своего рода очевидного решения.
Также не стесняйтесь изменять структуру.
'SELECT * FROM TREEHOUSE' станет моей первой догадкой. –