Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Kategori Rekursif daripada Pangkalan Data MySQL dengan Pertanyaan Tunggal?

Bagaimana untuk Mendapatkan Kategori Rekursif daripada Pangkalan Data MySQL dengan Pertanyaan Tunggal?

Barbara Streisand
Lepaskan: 2024-11-08 10:50:01
asal
747 orang telah melayarinya

How to Retrieve Recursive Categories from a MySQL Database with a Single Query?

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
Salin selepas log masuk

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;
Salin selepas log masuk

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!

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