Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengambil Semua Folder Kanak-kanak dan Anak Kecil dalam Pangkalan Data Hierarki menggunakan Pertanyaan SQL Tunggal?

Bagaimana untuk Mengambil Semua Folder Kanak-kanak dan Anak Kecil dalam Pangkalan Data Hierarki menggunakan Pertanyaan SQL Tunggal?

Barbara Streisand
Lepaskan: 2024-11-02 03:00:30
asal
540 orang telah melayarinya

How to Retrieve All Child and Subchild Folders in a Hierarchical Database using a Single SQL Query?

Pertanyaan Rekursif untuk Dapatkan Semua Folder Kanak-kanak dan Anak Kecil dalam MySQL

Soalan:

Bagaimana bolehkah saya mereka bentuk pertanyaan SQL tunggal untuk mendapatkan semua folder kanak-kanak dan anak kecil untuk ID folder induk yang diberikan dalam pangkalan data hierarki?

Senario:

Pertimbangkan Folder jadual 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

Jadual diisi seperti 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

Masalah Pernyataan:

Kami mahu mereka bentuk pertanyaan yang mengembalikan semua folder kanak-kanak dan anak kecil untuk ID folder induk tertentu. Contohnya:

  • Untuk ID folder induk 1, pertanyaan hendaklah mengembalikan [2, 3, 4, 5, 6, 7].
  • Untuk ID folder induk 4, pertanyaan harus kembali [5, 7, 6].
  • Untuk ID folder induk 3, pertanyaan harus kembali [4, 5, 6, 7].

Penyelesaian:

Pertanyaan berikut menggunakan teknik rekursif untuk mencapai hasil yang diinginkan:

<code class="sql">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;</code>
Salin selepas log masuk

Penjelasan:

  • Pertanyaan menggunakan pembolehubah yang ditentukan pengguna @pv untuk menyimpan senarai ID folder kanak-kanak yang dipisahkan koma untuk tahap semasa.
  • Subkueri dalam pernyataan SELECT mendapatkan semula ID folder kanak-kanak untuk tahap semasa, memisahkannya dengan koma.
  • Pertanyaan luar kemudian menggabungkan keputusan semua peringkat, menyediakan senarai yang dipisahkan koma bagi semua ID folder kanak-kanak dan anak kecil untuk yang ditentukan ibu bapa.

Atas ialah kandungan terperinci Bagaimana untuk Mengambil Semua Folder Kanak-kanak dan Anak Kecil dalam Pangkalan Data Hierarki menggunakan Pertanyaan SQL Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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