Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Cekap Mendapatkan Kategori Rekursif dengan Satu Pertanyaan dalam PHP dan MySQL?

Bagaimana untuk Cekap Mendapatkan Kategori Rekursif dengan Satu Pertanyaan dalam PHP dan MySQL?

Barbara Streisand
Barbara Streisandasal
2024-11-06 19:22:03132semak imbas

How to Efficiently Retrieve Recursive Categories with a Single Query in PHP and MySQL?

Mendapatkan semula Kategori Rekursif dengan Pertanyaan Tunggal

Dalam struktur data hierarki seperti tapak web dengan artikel dan bahagian, mendapatkan semula kategori rekursif dengan cekap boleh menjadi cabaran. Untuk menangani isu ini, kami membentangkan penyelesaian yang berkuasa menggunakan PHP dan MySQL. Dengan memanfaatkan rujukan dan pembinaan pokok yang bijak, kami boleh mencapai prestasi optimum walaupun dengan set data yang besar.

Pendekatan

Penyelesaian kami melibatkan dua langkah utama:

  1. Ambil Data Kategori: Pertanyaan MySQL mendapatkan semula data kategori, termasuk ID kategori, nama dan kategori induk serta menyimpannya dalam tatasusunan bersekutu, $nodeList.
  2. Bina Struktur Pokok: Kami membina struktur pokok dalam PHP seperti berikut:

    • Jika kategori tidak mempunyai induk atau induknya tidak wujud dalam $nodeList, ia menjadi nod akar dan ditambahkan pada $tree.
    • Jika tidak, tatasusunan kanak-kanak kategori ditambah pada tatasusunan kanak-kanak induknya dalam $nodeList.

Dengan menggunakan rujukan untuk mengemas kini struktur pokok secara dinamik, kami mencipta perwakilan yang ringan dan cekap bagi kategori rekursif.

Contoh Kod

Coretan kod berikut menggambarkan pendekatan:

$nodeList = array();
$tree     = array();

$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()));
}

foreach ($nodeList as $nodeId => &$node) {
    if (!$node['parent'] || !array_key_exists($node['parent'], $nodeList)) {
        $tree[] = &$node;
    } else {
        $nodeList[$node['parent']]['children'][] = &$node;
    }
}
unset($node);
unset($nodeList);

Kelebihan Pendekatan Ini

Berbanding dengan pertanyaan MySQL rekursif, pendekatan PHP ini menawarkan beberapa kelebihan:

  • Lebih Pantas: Mengelakkan berbilang perjalanan pergi dan balik ke pangkalan data, menghasilkan prestasi yang lebih baik.
  • Skalabiliti: Mengendalikan pokok besar dengan cekap tanpa membebankan pangkalan data.
  • Kemudahan: Merangkul kesederhanaan dan kebolehselenggaraan PHP, menjadikan pembangunan dan penyelenggaraan kod lebih mudah.

Kesimpulan

Dengan menggunakan rujukan dan membina pokok struktur dalam PHP, kami menyediakan penyelesaian yang sangat cekap untuk mengambil kategori rekursif dengan satu pertanyaan. Pendekatan ini bukan sahaja pantas dan berskala tetapi juga praktikal dan mudah untuk pengurusan kod.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mendapatkan Kategori Rekursif dengan Satu Pertanyaan dalam PHP dan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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