Bagaimana untuk Melaksanakan Pengambilan Folder Rekursif dalam MySQL?

Patricia Arquette
Lepaskan: 2024-11-02 14:47:30
asal
189 orang telah melayarinya

How to Implement Recursive Folder Retrieval in MySQL?

Pencapaian Rekursif Folder Kanak-kanak dalam MySQL

Apabila bekerja dengan struktur data hierarki, adalah perlu untuk mendapatkan semula elemen kanak-kanak dan sub-anak mereka daripada pangkalan data. Dalam kes jadual yang mewakili folder, pertanyaan diperlukan yang boleh mendapatkan semula semua folder anak untuk folder induk tertentu.

Pertimbangkan senario di mana kami mempunyai jadual Folder dengan struktur berikut:

CREATE TABLE IF NOT EXISTS `Folder` (
    `idFolder` INT(11) NOT NULL AUTO_INCREMENT,
    `FolderName` VARCHAR(150) NOT NULL,
    `idFolderParent` INT(11) NULL,
    PRIMARY KEY (`idFolder`),
    CONSTRAINT `fk_1`
    FOREIGN KEY (`idFolderParent`)
    REFERENCES `Folder` (`idFolder`)
);
Salin selepas log masuk

Kami mempunyai set data sampel untuk jadual ini:

idFolder , FolderName , idFolderParent
   1           ADoc           Null  
   2           ADoc1           1  
   3           ADoc2           2
   4           ADoc3           3
   5           ADoc4           4
   6           ADoc5           5
   7           ADoc6           4
Salin selepas log masuk

Cabaran

Memandangkan idFolder, objektifnya adalah untuk mengarang satu pertanyaan yang mendapatkan semula semua folder anak, bersama-sama dengan mana-mana folder sub-anak secara rekursif. Contohnya:

  • Apabila idFolder ialah 1, hasilnya hendaklah: 2, 3, 4, 5, 6, 7
  • Untuk idFolder 4, hasil yang dijangkakan ialah: 5, 6, 7
  • Begitu juga, untuk idFolder 3, output hendaklah: 4, 5, 6, 7

Penyelesaian

Penyelesaian yang disediakan memanfaatkan gabungan pembolehubah takrif pengguna MySQL dan subkueri untuk mencapai perolehan semula rekursif:

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

Penjelasan

Pertanyaan menggunakan fungsi FIND_IN_SET() untuk menyemak sama ada idFolderParent bagi baris semasa wujud dalam nilai pembolehubah yang ditentukan pengguna @pv. Jika ia berlaku, nilai itu dilampirkan pada pembolehubah lv. Subkueri menjana berbilang baris, setiap satu mewakili tahap carian rekursif.

Dengan menggunakan fungsi GROUP_CONCAT() dengan klausa SEPARATOR, hasil daripada setiap baris digabungkan dan dipisahkan oleh pembatas yang ditentukan (dalam kes ini , koma). Hasil akhir ialah rentetan yang mengandungi folder anak bercantum.

Penyelesaian ini menyediakan kaedah yang mantap untuk mendapatkan semula folder kanak-kanak dan sub-anak secara rekursif, walaupun apabila susunan ibu bapa dalam pangkalan data mungkin tidak mengikut hierarki yang ketat.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pengambilan Folder 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!