Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah saya boleh mendapatkan semula semua folder keturunan dalam hierarki bersarang menggunakan pertanyaan rekursif dalam MySQL?

Bagaimanakah saya boleh mendapatkan semula semua folder keturunan dalam hierarki bersarang menggunakan pertanyaan rekursif dalam MySQL?

Patricia Arquette
Patricia Arquetteasal
2024-11-05 16:04:02424semak imbas

How can I retrieve all descendant folders in a nested hierarchy using recursive queries in 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!

Kenyataan:
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