ЭТО ЛУЧШЕ И МЕНЬШЕ
У пользователя "bobince" его почти нет. Я понял это и заставил его работать на меня, потому что у меня немного больше опыта работы с MySQL, чем у большинства. Однако я понимаю, почему ответ Бобинса может отпугнуть людей. Его запрос не завершен. Вы должны сначала выбрать parent_left и parent_right в переменные mysql.
Два приведенных ниже запроса предполагают, что ваша таблица называется tree
, ваш левый столбец - lft
, правый столбец - rgt
, а ваш первичный ключ - id
. Измените эти значения в соответствии с вашими потребностями. Также рассмотрите первое предложение выбора. Вы увидите, что я ищу непосредственных потомков узла 5. Измените число 5, чтобы искать дочерние элементы любого узла, который вы хотите.
Лично я считаю, что это более изящный, сексуальный и более эффективный запрос, чем другие, представленные до сих пор.
SELECT `lft`, `rgt` INTO @parent_left, @parent_right FROM efm_files WHERE `id` = 5;
SELECT `child`.`id`
FROM `tree` AS `child`
LEFT JOIN `tree` AS `ancestor` ON
`ancestor`.`lft` BETWEEN @parent_left+1 AND @parent_right-1 AND
`child`.`lft` BETWEEN `ancestor`.`lft`+1 AND `ancestor`.`rgt`-1
WHERE
`child`.`lft` BETWEEN @parent_left+1 AND @parent_right-1 AND
`ancestor`.`id` IS NULL