Ini hanyalah sebuah Model Kedekatan meja? Maka tidak mungkin dalam satu query tanpa mengetahui kedalaman maksimum.
Bahan untuk dipikirkan adalah Mengelola Data Hirarki di MySQL (walaupun saya tidak menganjurkan menggunakan Model Kumpulan Bersarang untuk data yang berubah secara teratur).
Dengan banyak gabungan (kiri), lebih khusus lagi:dengan sebanyak mungkin gabungan kiri sebagai kedalaman maksimum pohon, itu akan dimungkinkan dalam satu kueri. Inilah alasan mengapa banyak orang cenderung menyimpan 'kedalaman' kategori tertentu, sehingga Anda dapat memfilter dan membatasi jumlah gabungan ke tabel yang sama ke jumlah yang lebih masuk akal.
Secara pribadi, untuk mengubah data secara teratur:Saya cenderung mengonfigurasi pemicu pada sisipan/pembaruan, yang akan menyimpan/men-cache 'jalur' saat ini dari sebuah simpul berdasarkan id (misalnya:jalur adalah '12/62/28/345 ', di mana setiap langkah di antara pembatas /
adalah kunci utama dari simpul induk dalam urutan yang benar (345 induk adalah 28, induk 28 adalah 62, dll.)), jadi saya dapat menanyakannya hanya dengan satu gabungan seperti ini (/ digunakan sebagai pemisah):
SELECT j.*
FROM tablename o
JOIN tablename j
WHERE j.path LIKE CONCAT (o.path,'/%')
AND j.id != o.id -- skip parent asked for.
WHERE o.id = <the id of the node you're looking for>;