Mendapatkan semula Kategori Rekursif dengan Pertanyaan MySQL Tunggal
Dalam konteks penyusunan kandungan tapak web, kategori rekursif membenarkan struktur hierarki dengan pelbagai peringkat. Untuk mendapatkan semula kategori sedemikian dengan cekap daripada pangkalan data MySQL, satu pertanyaan biasanya digunakan.
MySQL menawarkan pengendali CONNECT_BY_ROOT, yang membolehkan pemilihan rekursif data. Pertimbangkan pertanyaan berikut:
SELECT category_id, name, parent FROM categories CONNECT BY ROOT parent ORDER BY LEVEL
Pertanyaan ini mendapatkan semula semua kategori dalam jadual, menyambungkannya secara hierarki berdasarkan lajur induk. Fungsi LEVEL memberikan tahap kepada setiap baris, menunjukkan kedudukannya dalam hierarki, dengan kategori peringkat atas mempunyai tahap 1.
Untuk membina struktur pepohon rekursif dalam PHP, tukar hasil pertanyaan kepada tatasusunan, di mana setiap kategori diwakili sebagai nod dengan sifat kanak-kanak. Contoh berikut menggambarkan proses:
$nodeList = []; $tree = []; $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, ['children' => []]); } 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); // Return the tree structure return $tree;
Kod PHP ini membina tatasusunan berbilang dimensi yang mencerminkan perhubungan hierarki antara kategori. Kategori peringkat atas diletakkan dalam tatasusunan $tree, dan anak-anak mereka bersarang dalam tatasusunan anak masing-masing.
Pendekatan ini menggunakan rujukan kepada nod, yang meminimumkan penggunaan memori berbanding dengan mencipta objek nod baharu. Ia juga mengelakkan pertanyaan SQL rekursif, menjadikannya lebih cekap untuk struktur pokok yang besar.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kategori Rekursif daripada Pangkalan Data MySQL dengan Pertanyaan Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!