Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menghuraikan Jadual Rata ke dalam Struktur Pokok Bersarang dengan Cekap?
Tukar jadual rata yang mewakili hierarki pokok kepada struktur bersarang dengan cekap, yang boleh dicapai menggunakan pelbagai kaedah. Artikel ini meneroka pendekatan minimalis menggunakan struktur data asas dan mempertimbangkan kaedah penyimpanan pangkalan data alternatif untuk mengoptimumkan perwakilan pokok.
Andaikan jadual mengandungi data berikut:
Id | Name | ParentId | Order |
---|---|---|---|
1 | 'Node 1' | 0 | 10 |
2 | 'Node 1.1' | 1 | 10 |
3 | 'Node 2' | 0 | 20 |
4 | 'Node 1.1.1' | 2 | 10 |
5 | 'Node 2.1' | 3 | 10 |
6 | 'Node 1.2' | 1 | 20 |
Harai jadual ini menjadi struktur pokok:
Buat kamus: Petakan Id setiap nod kepada data yang sepadan.
Kenal pasti nod punca: Nod punca ialah nod tanpa ParentId.
Bina pepohon: Bina pepohon dengan mencipta nod anak secara rekursif dan menambahkannya pada nod induk yang sepadan.
Isih nod anak: Isih nod anak setiap nod mengikut Susunan nod anak.
Pseudokod untuk kaedah ini:
<code>创建字典(table) def 获取根节点(): 根节点 = [] 对于 id, 节点 in 字典.items(): 如果 节点['ParentId'] == 0: 根节点.append(节点) 返回 根节点 def 构建树(根节点): 对于 根节点 in 根节点: 子节点 = [] 对于 id, 节点 in 字典.items(): 如果 节点['ParentId'] == 根节点['Id']: 子节点.append(节点) 子节点.sort(key=lambda x: x['Order']) 根节点['children'] = 子节点 构建树(子节点) def 打印树(根节点): 对于 根节点 in 根节点: 打印(根节点['Name']) 如果 'children' in 根节点: 打印树(根节点['children'])</code>
Meja penutup:
Cara lain untuk menyimpan struktur pokok dalam pangkalan data hubungan ialah menggunakan jadual penutupan, yang mengandungi jadual berasingan yang mengandungi ID nod nenek moyang dan lajur ID nod keturunan. Ini membolehkan pertanyaan mudah tentang perhubungan.
Pertanyaan menggunakan jadual penutupan:
<code>SELECT f.name, GROUP_CONCAT(b.ancestor_id order by b.path_length desc) AS breadcrumbs FROM FlatTable f JOIN ClosureTable a ON (f.id = a.descendant_id) JOIN ClosureTable b ON (b.descendant_id = a.descendant_id) WHERE a.ancestor_id = 1 GROUP BY a.descendant_id ORDER BY f.name</code>
Set bersarang:
Set bersarang melibatkan penyimpanan maklumat lokasi setiap nod dalam pepohon dalam satu jadual. Kaedah ini membenarkan pertanyaan berasaskan julat yang cekap bagi nod dalam tahap atau subpokok tertentu.
Walaupun contoh yang disediakan menggunakan jadual rata sebagai input, kaedah yang dicadangkan berfungsi dengan baik dengan struktur data dan kaedah storan yang berbeza. Dengan menggunakan teknik yang sesuai, anda boleh menghuraikan hierarki pokok dengan cekap dan memastikan integriti data dan kemudahan akses.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghuraikan Jadual Rata ke dalam Struktur Pokok Bersarang dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!