Вы почти наверняка захотите использовать для этого некоторую рекурсию. И если вы делаете это, то было бы тривиально (на самом деле проще) получить все дерево, а не его части на фиксированной глубине.
В действительно грубом псевдокоде вы захотите что-то вроде этого:
getChildren(parent){
children = query(SELECT * FROM table WHERE parent_id = parent.id)
return children
}
printTree(root){
print root
children = getChildren(root)
for child in children {
printTree(child)
}
}
Хотя на практике вы редко захотите сделать что-то подобное. Это будет довольно неэффективно, так как он делает один запрос для каждой строки в таблице, поэтому он будет полезен только для небольших таблиц или для деревьев, которые не вложены слишком глубоко. Если честно, в любом случае вы, вероятно, захотите ограничить глубину.
Однако, учитывая популярность такого рода структуры данных, вполне может быть, что MySQL поможет вам в этом, в частности, чтобы сократить количество запросов, которые вам нужно сделать.
Редактировать: Подумав об этом, бессмысленно делать все эти запросы. Если вы все равно читаете всю таблицу, тогда вы можете просто вылить все это в оперативную память - при условии, что она достаточно мала!