Rumah >pangkalan data >tutorial mysql >Bagaimanakah saya boleh mendapatkan semula semua folder keturunan dalam hierarki bersarang menggunakan pertanyaan rekursif dalam MySQL?
Pertanyaan Rekursif untuk Folder Bersarang
Mendapatkan semua folder kanak-kanak dan anak kecil dengan berbilang peringkat bersarang memberikan cabaran untuk pertanyaan MySQL. Walaupun terdapat pelbagai pendekatan, artikel ini akan menumpukan pada penyelesaian yang berkesan dan komprehensif.
Untuk mendapatkan semula semua folder turunan daripada induk tertentu, kami boleh menggunakan pertanyaan rekursif, yang membenarkan pengiraan bersarang dalam satu pernyataan. Kaedah ini melibatkan proses berulang, di mana setiap ID folder digunakan sebagai parameter untuk lelaran seterusnya, mengembangkan kedalaman carian dengan setiap kitaran.
Pertimbangkan senario ini: diberikan jadual pangkalan data bernama Folder dengan lajur idFolder (auto -kunci utama yang ditambah), FolderName dan idFolderParent (kunci asing untuk Folder.idFolder), kami mengisinya dengan data berikut:
idFolder | FolderName | idFolderParent |
---|---|---|
1 | ADoc | NULL |
2 | ADoc1 | 1 |
3 | ADoc2 | 2 |
4 | ADoc3 | 3 |
5 | ADoc4 | 4 |
6 | ADoc5 | 5 |
7 | ADoc6 | 4 |
Struktur ini membolehkan kami membuat hierarki folder bersarang. Sebagai contoh, jika kami membuat pertanyaan untuk semua folder anak ADoc (idFolder=1), kami mengharapkan untuk mendapatkan bukan sahaja anak terdekatnya (ADoc1, ADoc2) tetapi juga semua folder keturunan di bawahnya (ADoc3, ADoc4, ADoc5, ADoc6, ADoc7) .
Pertanyaan SQL berikut mencapainya menggunakan lelaran rekursif:
<code class="sql">WITH RECURSIVE FolderHierarchy AS ( SELECT idFolder, FolderName, idFolderParent FROM Folder WHERE idFolder = 1 UNION ALL SELECT f.idFolder, f.FolderName, f.idFolderParent FROM FolderHierarchy AS h JOIN Folder AS f ON h.idFolderParent = f.idFolderParent ) SELECT idFolder, FolderName FROM FolderHierarchy;</code>
Pertanyaan ini menggunakan ungkapan jadual biasa (CTE) bernama FolderHierarchy yang pada mulanya memilih folder akar (ADoc) dan kemudian secara rekursif menyertai folder kanak-kanak ke hierarki. Ia meneruskan proses ini sehingga tiada lagi folder anak kekal, dengan berkesan mengumpul semua keturunan. Hasil akhir menyediakan senarai bersarang ID dan nama folder, membolehkan untuk mendapatkan semula semua folder kanak-kanak dan anak kecil dengan sebarang tahap kedalaman.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mendapatkan semula semua folder keturunan dalam hierarki bersarang menggunakan pertanyaan rekursif dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!