Mengulangi Struktur Pokok dalam MySQL
Mengurus data hierarki dalam pangkalan data boleh menjadi satu cabaran. Satu pendekatan biasa melibatkan penggunaan hubungan ibu bapa-anak, seperti yang ditunjukkan dalam soalan yang disediakan. Walaupun membuat pertanyaan untuk keturunan terdekat adalah mudah, mendapatkan semula semua keturunan boleh menjadi lebih kompleks.
Dokumentasi MySQL mencadangkan beberapa kaedah untuk mengendalikan data hierarki, termasuk yang berikut:
Untuk contoh yang diberikan, menggunakan kaedah Penghitungan Laluan, pertanyaan berikut akan mendapatkan semula semua keturunan lokasi induk:
WITH RECURSIVE descendant_path AS ( SELECT id, path FROM locations WHERE id IN (SELECT location_id FROM location_parent WHERE parent_id = '$locationid') UNION ALL SELECT l.id, CONCAT(dp.path, ',', l.id) FROM locations l JOIN descendant_path dp ON l.path LIKE CONCAT(dp.path, '%') ) SELECT id FROM descendant_path;
Pertanyaan ini menggunakan CTE rekursif (Ungkapan Jadual Biasa) untuk melelaran melalui struktur pokok dan membina laluan untuk setiap lokasi keturunan. Dengan menyatakan lokasi permulaan dalam pertanyaan awal, semua keturunan boleh diambil dalam satu laluan.
Atas ialah kandungan terperinci Bagaimana untuk Mengambil Secara Rekursif Semua Keturunan dalam Struktur Pokok MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!