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`) );
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
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:
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;
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!