Tree Structure Querying dalam MySQL: Depth-Independent Traversal
Mengakses data struktur pokok dalam MySQL selalunya melibatkan pertanyaan rekursif atau berjujukan. Walau bagaimanapun, adalah mungkin untuk mendapatkan semula semua keturunan atau nenek moyang baris tertentu dalam jadual berstruktur pokok tanpa menyatakan tahap kedalaman secara eksplisit menggunakan satu pertanyaan. Teknik ini dikenali sebagai Traversal Pokok Prapesanan Terubahsuai.
Metodologi Pertanyaan
Dalam jadual struktur pokok dengan id lajur, data dan parent_id, pertanyaan traversal prapesanan yang diubah suai boleh dirumuskan seperti berikut:
SELECT id, data, parent_id FROM tree_table WHERE id IN ( SELECT id FROM tree_table WHERE ancestry LIKE '%given_id/%' )
Di sini, given_id mewakili ID baris yang mana anda ingin mendapatkan semula keturunan atau nenek moyang.
Penggunaan dan Pelaksanaan
Rentetan pertanyaan 'keturunan LIKE '%given_id/%'' menapis untuk baris yang mempunyai ID yang diberikan sebagai sebahagian daripada laluan keturunan mereka. Ini memastikan bahawa semua keturunan (bersama-sama dengan baris yang diberikan) dikembalikan. Untuk mendapatkan semula nenek moyang, cuma gantikan '%given_id/%' dengan '%/given_id/%'.
Contohnya, dalam PHP dengan MySQLi:
$stmt = $mysqli->prepare("SELECT id, data, parent_id FROM tree_table WHERE id IN (SELECT id FROM tree_table WHERE ancestry LIKE '%?/%')");
Maklumat Tambahan
Contoh PHP yang disediakan dari Sitepoint (disebutkan dalam jawapan) menawarkan ilustrasi komprehensif teknik ini. Untuk mendapatkan maklumat lanjut tentang pengendalian struktur pokok dalam SQL, rujuk "Pokok dan Hierarki dalam SQL untuk Smarties" Joe Celko.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyoal Keturunan atau Nenek Moyang dengan Cekap dalam Struktur Pokok MySQL Tanpa Menentukan Kedalaman?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!