Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengisi Kategori Hierarki secara Rekursif dalam MySQL dengan Pertanyaan Tunggal?

Bagaimana untuk Mengisi Kategori Hierarki secara Rekursif dalam MySQL dengan Pertanyaan Tunggal?

Linda Hamilton
Lepaskan: 2024-11-08 06:32:01
asal
955 orang telah melayarinya

How to Recursively Populate Hierarchical Categories in MySQL with a Single Query?

Mengisi Kategori Rekursif dengan Pertanyaan MySQL Tunggal

Menyusun kandungan tapak web ke dalam kategori hierarki menimbulkan cabaran dalam hal mendapatkan kembali kategori tersebut dengan cekap untuk paparan. Artikel ini menyelidiki pendekatan paling berkesan untuk mendapatkan semula data kategori secara rekursif menggunakan PHP dan MySQL.

Struktur Rekursif: Pokok Hierarki

Bayangkan tapak web dengan artikel dan bahagian tersusun dalam struktur seperti pokok. Setiap bahagian mungkin mempunyai bahagian induk, yang berpotensi membawa kepada pelbagai peringkat sarang. Contohnya:

  • Subjek 1

    • Subjek 2

      • Subjek 3
    • Subjek 4

      • Subjek 5
      • Subjek 6

        • Subjek 7
  • Subjek 8
  • Subjek 9

Pertanyaan MySQL: Mengambil Perhubungan Ibu Bapa-Anak

Untuk mendapatkan semula data ini secara rekursif, kita perlu mengambil perhubungan ibu bapa-anak daripada pangkalan data MySQL. Pertanyaan di bawah menyelesaikan tugas ini:

SELECT category_id, name, parent
FROM categories
ORDER BY parent
Salin selepas log masuk

Skrip PHP: Membina Struktur Pokok

Setelah data diambil, kita boleh membina struktur pokok dalam PHP untuk mengendalikan senario bersarang yang kompleks. Berikut ialah skrip contoh:

$nodeList = array(); // Associative array to store category nodes
$tree = array(); // Array to hold the root nodes

// Populate the $nodeList array with category data
$query = mysql_query("SELECT category_id, name, parent FROM categories ORDER BY parent");
while ($row = mysql_fetch_assoc($query)) {
    $nodeList[$row['category_id']] = array_merge($row, array('children' => array()));
}
mysql_free_result($query);

// Populate the $tree array with root nodes (those without a parent)
foreach ($nodeList as $nodeId => &$node) {
    if (!$node['parent'] || !array_key_exists($node['parent'], $nodeList)) {
        $tree[] = &$node;
    } else {
        // If the node has a parent, add it as a child of that parent
        $nodeList[$node['parent']]['children'][] = &$node;
    }
}

// Clean up the variables
unset($node);
unset($nodeList);

// The $tree array now contains the hierarchical tree structure
Salin selepas log masuk

Pertimbangan Prestasi

Pendekatan berasaskan PHP ini amat cekap, walaupun untuk pokok besar. Ia mengelakkan overhed membuat beberapa pertanyaan MySQL rekursif, yang boleh melambatkan prestasi dengan ketara.

Kesimpulan

Penyelesaian PHP dan MySQL yang cekap ini membolehkan anda mendapatkan semula data kategori secara rekursif tanpa mengorbankan prestasi. Dengan memanfaatkan pendekatan berasaskan rujukan yang bijak, kami boleh membina struktur hierarki yang kompleks tanpa memerlukan pertanyaan pangkalan data yang kompleks.

Atas ialah kandungan terperinci Bagaimana untuk Mengisi Kategori Hierarki secara Rekursif dalam MySQL dengan Pertanyaan Tunggal?. 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