Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Cari Semua Nod Induk Entri Khusus dalam Hierarki MySQL Menggunakan Pertanyaan Tunggal?

Bagaimanakah Saya Boleh Cari Semua Nod Induk Entri Khusus dalam Hierarki MySQL Menggunakan Pertanyaan Tunggal?

Linda Hamilton
Lepaskan: 2024-11-30 11:54:18
asal
360 orang telah melayarinya

How Can I Find All Parent Nodes of a Specific Entry in a MySQL Hierarchy Using a Single Query?

Mencari Semua Ibu Bapa dalam Jadual MySQL dengan Pertanyaan Tunggal (Pertanyaan Rekursif)

Dalam pengurusan pangkalan data, mendapatkan semula data hierarki selalunya memerlukan pertanyaan kompleks yang melibatkan algoritma rekursif. Satu senario sedemikian timbul apabila kita perlu mengekstrak semua nod induk entri tertentu dalam jadual hierarki seperti yang dibentangkan di atas.

Cabaran:

Pertimbangkan jadual yang disediakan dengan hierarki item menu , di mana setiap nod mempunyai ID, tajuk dan ID induk. Matlamat kami adalah untuk mengambil semua nod induk entri dengan tajuk "Kategori" menggunakan satu pertanyaan MySQL.

Penyelesaian:

Kami boleh menggunakan pertanyaan rekursif untuk melintasi jadual dan mengumpulkan nod induk pada setiap peringkat. Pertanyaan berikut menyelesaikannya:

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

Penjelasan:

  • Subkueri memulakan dua pembolehubah pengguna @r (id nod semasa) dan @l (tahap nod semasa ) dengan nilai awal 31 (id "Kategori") dan 0, masing-masing.
  • Pertanyaan luar berulang melalui jadual, mengemas kini @r dengan ID induk nod semasa dan menambah @l untuk menjejaki tahap semasa.
  • Hasil pertanyaan luar (T1) dicantumkan dengan jadual asal (T2 ) berdasarkan lajur biasa _id.
  • Akhir sekali, hasilnya diisih mengikut tertib menurun lvl untuk membentangkan nod induk dalam hierarki pesanan.

Output:

Menjalankan pertanyaan akan menghasilkan output yang diingini:

id title controller method url parent_id
3 Modules admin modules (NULL) 0
17 User Modules modules user_module (NULL) 3
31 Categories categories category (NULL) 17

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Semua Nod Induk Entri Khusus dalam Hierarki MySQL Menggunakan 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