Rumah > pangkalan data > tutorial mysql > Bagaimanakah cara saya mendapatkan semua nod anak, cucu dan keturunan di bawah nod induk menggunakan PHP dengan hasil pertanyaan MySQL?

Bagaimanakah cara saya mendapatkan semua nod anak, cucu dan keturunan di bawah nod induk menggunakan PHP dengan hasil pertanyaan MySQL?

Susan Sarandon
Lepaskan: 2024-11-09 01:35:02
asal
893 orang telah melayarinya

How do I retrieve all child, grandchild, and descendant nodes under a parent node using PHP with MySQL query results?

Dapatkan semua Anak, Cucu, dll. Nod Di Bawah Ibu Bapa Menggunakan PHP dengan Keputusan Pertanyaan MySQL

Isu Asal:

Mengambil semula semua anak, cucu dan nod keturunan seterusnya yang dikaitkan dengan nod induk ialah tugas biasa apabila bekerja dengan struktur data hierarki. Masalah ini timbul dalam senario di mana jadual pangkalan data menggunakan model senarai bersebelahan untuk organisasi data.

Pendekatan Menggunakan Rekursi:

Untuk menangani isu ini, rekursi terbukti berkesan pendekatan. Berikut ialah penjelasan terperinci tentang cara rekursi boleh digunakan untuk mencapai matlamat ini:

1. Mewujudkan Fungsi Asas:

Fungsi rekursif ialah fungsi yang meminta dirinya untuk menyelesaikan masalah dan sering digunakan dalam senario yang melibatkan struktur data hierarki atau bersarang. Dalam keadaan ini, fungsi asas kami akan dinamakan fetch_recursive.

2. Mengenalpasti Kriteria untuk Panggilan Rekursif:

Dalam fetch_recursive, dua syarat utama menentukan apabila panggilan rekursif dibuat:

  • Nod Induk Ditemui: Apabila nod semasa yang dinilai ialah nod induk yang kami minati (berdasarkan nod yang disediakan ID).
  • Nod Anak Ditemui: Apabila nod semasa mempunyai ID induk yang sepadan dengan ID nod induk.

3. Membina Susunan Hasil:

Setiap kali panggilan rekursif dibuat, fungsi akan mengisi tatasusunan hasil dengan data yang berkaitan daripada nod semasa. Tatasusunan ini akan berkembang secara berulang apabila panggilan rekursif melintasi struktur pokok.

4. Mencari Nod Kanak-Kanak Secara Rekursif:

Jika nod semasa mempunyai sebarang nod anak (yang dikenal pasti oleh kewujudan sifat kanak-kanak), panggilan rekursif lain akan dibuat untuk mendapatkan semula nod anak tersebut. Proses ini berterusan sehingga semua nod anak nod induk ditangkap.

Fungsi Tambahan:

1. Mengendalikan Cucu dan Keturunan:

Sifat rekursif fetch_recursive memastikan ia akan secara automatik melintasi hierarki dan mendapatkan bukan sahaja nod anak tetapi juga cucu dan keturunan seterusnya.

2 . Keputusan Penyatuan:

Selepas semua panggilan rekursif selesai, fungsi mengembalikan tatasusunan tunggal yang komprehensif yang mengandungi semua nod keturunan di bawah nod induk yang ditentukan.

Kod Pelaksanaan:

function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array())
{
    foreach($src_arr as $row)
    {
        if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid)
        {
            $rowdata = array();
            foreach($row as $k => $v)
                $rowdata[$k] = $v;
            $cats[] = $rowdata;
            if($row['parent_id'] == $currentid)
                $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true));
        }
    }
    return $cats;
}
Salin selepas log masuk
Salin selepas log masuk

Penggunaan:

Untuk menggunakan fungsi fetch_recursive, hanya hantar tatasusunan data asal (dalam kes ini, $data) dan ID nod yang anda ingin dapatkan semula keturunan. Contohnya, untuk mendapatkan semua nod anak, cucu dan keturunan di bawah nod 3:

function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array())
{
    foreach($src_arr as $row)
    {
        if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid)
        {
            $rowdata = array();
            foreach($row as $k => $v)
                $rowdata[$k] = $v;
            $cats[] = $rowdata;
            if($row['parent_id'] == $currentid)
                $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true));
        }
    }
    return $cats;
}
Salin selepas log masuk
Salin selepas log masuk

Ini akan mengisi pembolehubah $list dengan tatasusunan yang mengandungi semua nod yang berkaitan.

Atas ialah kandungan terperinci Bagaimanakah cara saya mendapatkan semua nod anak, cucu dan keturunan di bawah nod induk menggunakan PHP dengan hasil pertanyaan 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