Seperti yang dikatakan dalam komentar, tidak ada jalan pintas dengan mysql.
TAPI!
Jika Anda memiliki kemungkinan untuk mengubah struktur database, Anda dapat menerapkan desain yang lebih baik untuk menangani hierarki seperti pohon.
Jika Anda mengikuti TUTORIAL INI dari Bill Karwin (DI SINI adalah jawaban asli yang mereferensikan tutorial slideshow itu), Anda dapat menemukan 4 metode yang digunakan untuk memodelkan struktur hierarkis:
- Daftar Kecakapan
- Pencacahan Jalur
- Set bersarang
- Tabel penutup
Sekarang, model terbaik yang mungkin adalah yang ke-4 (saya meninggalkan deskripsi dari 3 model lainnya kepada pembaca), yang pada dasarnya membutuhkan 2 tabel:satu untuk elemen dan satu untuk jalur. Di tabel jalur (tabel penutupan itu sendiri), Anda akan menyimpan setiap jalur dari setiap simpul ke setiap turunan (bukan hanya turunan langsung!).
Disarankan untuk menyimpan juga panjang jalur untuk setiap baris, karena memudahkan kueri untuk turunan langsung di pohon.
Meskipun solusi ini membutuhkan lebih banyak ruang, solusi ini memiliki kinerja terbaik secara keseluruhan dan sangat mudah digunakan:sama sekali tidak bergantung pada kueri rekursif DAN akan memberikan integritas referensial untuk seluruh kumpulan data!
Misalnya, untuk mendapatkan setiap anak dari simpul #4:
select a.*
from nodes a
join paths b
on a.node_id = b.descendant
where b.ancestor = 4
Contoh lain:dapatkan semua ancestor dari node #11
select a.*
from nodes a
join paths b
on a.node_id = b.ancestor
where b.descendant = 11
perlu menghapus subpohon dari simpul #6
delete from paths where descendant in
(select descendant from paths where ancestor = 6)