Mendapatkan Data Anak Hierarki dalam MySQL: Pemilihan Rekursif Berbilang Peringkat
Dalam bidang pertanyaan pangkalan data, ia sering menjadi perlu untuk mengekstrak bukan sahaja dengan segera data kanak-kanak tetapi juga maklumat keturunan pelbagai peringkat. Ini amat relevan dalam struktur hierarki, seperti carta organisasi atau sistem direktori bersarang.
Pertimbangkan jadual pangkalan data bernama Folder yang memodelkan direktori fail. Setiap folder mempunyai ID unik, nama dan ID folder induk pilihan. Matlamat utama kami adalah untuk mencipta pertanyaan yang, diberikan ID folder induk tertentu, boleh mendapatkan semula semua folder anak, folder anak kecil dan sebagainya, dengan berkesan memberikan paparan hierarki yang komprehensif.
Analisis Pertanyaan
Pertanyaan yang disediakan memanfaatkan fungsi GROUP_CONCAT() MySQL untuk mengagregat maklumat hierarki. Ia menggunakan pernyataan SELECT bersarang untuk mengambil semula semua folder anak secara berulang dengan menggabungkan ID mereka dalam senarai dipisahkan koma. Senarai ini kemudiannya disimpan dalam lv pembolehubah dan digunakan sebagai penapis untuk mengenal pasti tahap tambahan kanak-kanak secara progresif.
Pernyataan SELECT paling luar hanya mengumpulkan senarai gabungan ID anak untuk setiap lelaran dan membentangkannya sebagai koma- rentetan yang dipisahkan. Dengan menggunakan fungsi FIND_IN_SET(), pertanyaan memastikan setiap kanak-kanak dicari dalam set ID kanak-kanak yang dikenal pasti sebelum ini.
Pelaksanaan
Pertimbangkan contoh set data:
idFolder | FolderName | idFolderParent |
---|---|---|
1 | ADoc | NULL |
2 | ADoc1 | 7 |
3 | ADoc2 | 2 |
4 | ADoc3 | 3 |
5 | ADoc4 | NULL |
6 | ADoc5 | 5 |
7 | ADoc6 | 5 |
Untuk mendapatkan semula semua folder anak dan keturunannya untuk folder induk ID 5, laksanakan pertanyaan berikut:
<code class="sql">SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM ( SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder WHERE FIND_IN_SET(idFolderParent, @pv)) AS lv FROM Folder JOIN (SELECT @pv:=5) tmp ) a;</code>
Hasilnya ialah senarai yang dipisahkan koma bagi semua kanak-kanak dan ID anak kecil:
6,7,2,3,4
Kesimpulan
Pertanyaan yang disediakan menawarkan penyelesaian yang teguh untuk mendapatkan semula data anak hierarki dalam MySQL, memberikan pandangan menyeluruh tentang struktur folder dan hubungan bersarang. Ia merentasi hierarki dengan berkesan tanpa memerlukan sebarang pengubahsuaian pada struktur pangkalan data atau bergantung pada susunan perhubungan ibu bapa-anak yang telah ditetapkan. Penyelesaian ini terbukti amat berharga dalam mengurus struktur data hierarki yang kompleks.
Atas ialah kandungan terperinci Bagaimana untuk Mengambil Semua Keturunan dalam Struktur Hierarki Menggunakan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!