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

Patricia Arquette
Lepaskan: 2024-11-05 16:04:02
asal
423 orang telah melayarinya

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!