Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengambil Semua Keturunan dalam Struktur Hierarki Menggunakan MySQL?

Bagaimana untuk Mengambil Semua Keturunan dalam Struktur Hierarki Menggunakan MySQL?

DDD
Lepaskan: 2024-11-04 12:08:29
asal
886 orang telah melayarinya

How to Retrieve All Descendants in a Hierarchical Structure Using MySQL?

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>
Salin selepas log masuk

Hasilnya ialah senarai yang dipisahkan koma bagi semua kanak-kanak dan ID anak kecil:

6,7,2,3,4
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan