Itu tergantung pada implementasi aktual hierarki Anda dalam database. Jika Anda menggunakan model kumpulan bersarang ( http://mikehillyer.com/articles/managing-hierarchical-data- di-mysql/ ) Anda dapat mengambil jalur lengkap parent-to-child melalui satu pilihan.
Perbarui :Ok, karena Anda menggunakan model daftar adjacency, saya sarankan untuk menyimpan level node dalam tabel. Ini tidak hanya akan memberi Anda kedalaman simpul dalam satu kueri, tetapi juga memungkinkan Anda mengambil seluruh jalur ke simpul itu dalam satu kueri (walaupun kueri itu harus dibuat secara dinamis):
SELECT n1.name AS lvl1, n2.name as lvl2, n3.name as lvl3, ..., nN.name as lvlN
FROM nodes AS n1
JOIN nodes AS n2 ON n2.parent_id = n1.id
JOIN nodes AS n3 ON n3.parent_id = n2.id
...
JOIN nodes AS nN ON nN.parent_id = n(N-1).id
WHERE nN.id = myChildNode;
Karena Anda tahu bahwa simpul Anda berada di level N, tidak perlu gabungan kiri dan, dengan indeks yang sesuai pada id / parent_id, ini seharusnya cukup cepat.
Kelemahan dari pendekatan ini adalah Anda harus menjaga level simpul diperbarui selama pemindahan simpul, tetapi itu harus cukup mudah dan cepat karena Anda hanya akan melakukannya untuk simpul itu sendiri dan turunannya - bukan untuk sebagian besar tabel seperti yang akan Anda lakukan dengan kumpulan bersarang.