Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyoal Data Hierarki dalam MySQL Tanpa CONNECT BY PRIOR?

Bagaimana untuk Menyoal Data Hierarki dalam MySQL Tanpa CONNECT BY PRIOR?

Patricia Arquette
Lepaskan: 2025-01-06 13:09:42
asal
949 orang telah melayarinya

How to Query Hierarchical Data in MySQL Without CONNECT BY PRIOR?

Menyiasat Data Hierarki dalam MySQL tanpa "Connect By Prior"

Dalam MySQL, walaupun tiada klausa "Connect By Prior" yang jelas , adalah mungkin untuk mendapatkan semula data hierarki menggunakan gabungan rekursif teknik.

Algoritma Traversal Rekursif

Untuk melintasi jadual hierarki secara rekursif seperti tb_Tree, ikut langkah berikut:

  1. Pilih baris yang sepadan dengan ParentId nod akar yang dikehendaki.
  2. Kumpul nilai Id bagi baris yang dipilih.
  3. Ulang langkah 1 dan 2 untuk setiap Id dalam senarai yang dikumpul.

Proses rekursif ini berterusan sehingga semua nod daun dikenal pasti.

Pendekatan Berasaskan Kedalaman

Jika anda tahu kedalaman maksimum pepohon, anda boleh menyertai jadual itu sendiri berulang kali untuk mencapai tahap paling dalam dan kemudian menapis sebarang nilai NULL yang tinggal.

Perwakilan Set Bersarang

Sebagai alternatif, anda boleh mengubah suai struktur jadual untuk menggunakan perwakilan set bersarang. Ini melibatkan penambahan lajur tambahan untuk mewakili sempadan kiri dan kanan setiap nod dalam hierarki.

Contoh Pertanyaan untuk Mendapatkan Kanak-Kanak

Untuk mendapatkan semula semua kanak-kanak dari nod tertentu dengan Id sama dengan X, anda akan menggunakan pertanyaan berikut:

SELECT * FROM tb_Tree WHERE ParentId IN (
  SELECT Id FROM tb_Tree WHERE ParentId = X
  UNION ALL
  /* Recursive traversal of children */
  SELECT Id FROM tb_Tree WHERE Id IN (
    SELECT Id FROM tb_Tree WHERE ParentId = X
  )
);
Salin selepas log masuk

Pertanyaan ini merentasi hierarki secara rekursif, mengumpulkan semua nilai Id yang dikaitkan dengan nod anak.

Atas ialah kandungan terperinci Bagaimana untuk Menyoal Data Hierarki dalam MySQL Tanpa CONNECT BY PRIOR?. 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