Mengulangi Struktur Pokok dalam MySQL
Apabila bekerja dengan data hierarki, selalunya perlu untuk mendapatkan semula keturunan nod tertentu dalam pepohon struktur. Dalam konteks MySQL, di mana lokasi boleh berada di dalam lokasi lain, tugasan menjadi lebih kompleks apabila bilangan tahap meningkat.
Pertanyaan PHP/MySQL yang disediakan:
$sql = "SELECT id FROM se_locations_services WHERE parent_locationid IN ( SELECT location_id FROM se_locations_parent WHERE parent_id = '$locationid' )";
dengan berkesan mendapatkan semula keturunan terdekat dari lokasi tertentu.
Walau bagaimanapun, untuk mendapatkan semula semua keturunan, tanpa mengira kedalaman, pendekatan rekursif diperlukan. MySQL tidak menyokong pertanyaan rekursif secara asli, tetapi terdapat penyelesaian elegan yang digariskan dalam artikel komprehensif yang dipautkan di bawah dari mysql.com:
[Mengurus Data Hierarki dalam MySQL](https://www.mysql.com/news -and-events/mysql-perspectives/performance-tuning-json-mysql-for-hierarchical-data/)
Artikel ini membentangkan pelbagai pendekatan untuk mengendalikan data hierarki, termasuk pilihan menggunakan CTE (Umum Ungkapan Jadual) untuk melaksanakan rekursi:
WITH RECURSIVE descendants (id, parent_id) AS ( SELECT id, parent_id FROM locations UNION ALL SELECT l.id, l.parent_id FROM locations l JOIN descendants d ON l.parent_id = d.id ) SELECT DISTINCT id FROM descendants WHERE parent_id = $locationid;
Dengan menggunakan operator UNION ALL, CTE secara lelaran mengembangkan senarai keturunan, membenarkan MySQL mendapatkan semula hierarki penuh daripada satu pertanyaan.
Atas ialah kandungan terperinci Bagaimana untuk Melintasi Struktur Pokok secara Rekursif dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!