Penyelidikan Struktur Pokok Pertanyaan Tunggal dalam MySQL
Dalam SQL, struktur pokok selalunya disimpan dalam jadual dengan lajur untuk ID, data dan ID ibu bapa. Mendapatkan semula semua keturunan atau nenek moyang baris tertentu boleh menjadi mencabar, terutamanya memandangkan kedalaman mereka yang mungkin tidak diketahui.
Pertanyaan untuk Keturunan
Untuk mendapatkan semula semua keturunan baris tertentu, kita boleh menggunakan teknik yang dipanggil Modified Preorder Tree Traversal. Seperti yang diterangkan oleh Joe Celko dalam "Pokok dan Hierarki dalam SQL untuk Smarties," pendekatan ini melibatkan mencipta ungkapan jadual biasa rekursif (CTE) dengan struktur berikut:
WITH RECURSIVE Descendants AS ( SELECT id, data, parent_id FROM tree_table WHERE id = <starting_row_id> UNION ALL SELECT t.id, t.data, t.parent_id FROM Descendants AS T JOIN tree_table t ON t.parent_id = T.id ) SELECT * FROM Descendants;
CTE ini secara rekursif mengenal pasti semua baris anak untuk baris permulaan yang diberikan, kemudian meneruskan melalui hierarki sehingga ia mencapai daun nod.
Pertanyaan untuk Leluhur
Untuk mendapatkan semula semua nenek moyang baris tertentu, kita boleh menggunakan pendekatan yang serupa dengan sedikit pengubahsuaian:
WITH RECURSIVE Ancestors AS ( SELECT id, data, parent_id FROM tree_table WHERE id = <starting_row_id> UNION ALL SELECT t.id, t.data, t.parent_id FROM Ancestors AS T JOIN tree_table t ON t.id = T.parent_id ) SELECT * FROM Ancestors;
CTE ini secara rekursif mengenal pasti semua baris induk untuk baris permulaan yang diberikan, kemudian meneruskan ke atas melalui hierarki sehingga ia mencapai nod akar.
Contoh Pelaksanaan
Contoh kerja pertanyaan ini dalam PHP boleh didapati di: http://www.sitepoint.com /article/hierarchical-data-database/2/
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyoal Keturunan dan Nenek Moyang dengan Cekap dalam Struktur Pokok MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!