Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah Saya Boleh Cari Semua Leluhur Nod dalam Jadual Hierarki MySQL Menggunakan Pertanyaan Tunggal?

Bagaimanakah Saya Boleh Cari Semua Leluhur Nod dalam Jadual Hierarki MySQL Menggunakan Pertanyaan Tunggal?

Susan Sarandon
Susan Sarandonasal
2024-11-26 18:29:11353semak imbas

How Can I Find All Ancestors of a Node in a MySQL Hierarchical Table Using a Single Query?

Mencari semua ibu bapa dalam jadual MySQL dengan satu pertanyaan menggunakan CTE Rekursif

Dalam pangkalan data dengan struktur hierarki, mengenal pasti ibu bapa rekod tertentu boleh menjadi tugas yang kompleks. Dalam MySQL, cabaran ini boleh ditangani dengan cekap menggunakan Recursive Common Table Expression (CTE). Mari kita terokai penyataan masalah dan penyelesaiannya.

Pernyataan Masalah:

Diberikan jadual MySQL dengan struktur hierarki (seperti yang terdapat dalam skema yang disediakan), di mana setiap baris mewakili nod dengan ID, tajuk, ID induk dan maklumat lain yang berkaitan, tugasnya adalah untuk mendapatkan semua nenek moyang (ibu bapa) nod tertentu dalam hierarki dengan satu pertanyaan.

Penyelesaian:

Penyelesaian yang disediakan memanfaatkan CTE Rekursif untuk melintasi hierarki dan mengenal pasti ibu bapa nod yang ditentukan dengan IDnya. Pertanyaan berikut menunjukkan pendekatan:

SELECT T2.id, T2.title, T2.controller, T2.method, T2.url
FROM (
    SELECT
        @r AS _id,
        (SELECT @r := parent_id FROM menu WHERE id = _id) AS parent_id,
        @l := @l + 1 AS lvl
    FROM
        (SELECT @r := 31, @l := 0) vars,
        menu m
    WHERE @r <> 0) T1
JOIN menu T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC;

Penjelasan Pertanyaan:

  • Subkueri memulakan dua pembolehubah yang ditentukan pengguna, @r dan @l, dan memilih rekod yang ditentukan dengan ID 31 (dengan mengandaikan ia adalah nod sasaran). Pembolehubah ini digunakan untuk menjejak ID nod semasa (@r) dan tahap (@l) semasa lelaran rekursif.
  • Bahagian rekursif CTE berulang kali mengambil ID induk nod semasa dan meningkatkan tahap . Proses ini berterusan sehingga nod semasa tidak mempunyai induk (iaitu, @r ialah 0).
  • Pertanyaan luar menyertai CTE rekursif dengan jadual (menu) utama berdasarkan _id (ID rekod) untuk mendapatkan semula maklumat untuk setiap nenek moyang.
  • Klausa ORDER BY menyusun keputusan dalam susunan menurun tahap untuk memaparkan nenek moyang dalam susunan hierarki.

Pertanyaan ini dengan cekap mendapatkan semula semua ibu bapa nod yang ditentukan dengan satu pernyataan SQL, menyediakan penyelesaian yang mudah dan berprestasi untuk menavigasi data hierarki dalam MySQL.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Semua Leluhur Nod dalam Jadual Hierarki MySQL Menggunakan Pertanyaan Tunggal?. 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