Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Menyoal Keturunan dan Nenek Moyang dengan Cekap dalam Struktur Pokok MySQL?

Bagaimanakah Saya Boleh Menyoal Keturunan dan Nenek Moyang dengan Cekap dalam Struktur Pokok MySQL?

DDD
Lepaskan: 2025-01-06 18:24:10
asal
372 orang telah melayarinya

How Can I Efficiently Query Descendants and Ancestors in a MySQL Tree Structure?

Penyelidikan Struktur Pokok Pertanyaan Tunggal dalam MySQL

Dalam SQL, struktur pokok selalunya disimpan dalam jadual dengan lajur untuk ID, data dan ID ibu bapa. Mendapatkan semula semua keturunan atau nenek moyang baris tertentu boleh menjadi mencabar, terutamanya memandangkan kedalaman mereka yang mungkin tidak diketahui.

Pertanyaan untuk Keturunan

Untuk mendapatkan semula semua keturunan baris tertentu, kita boleh menggunakan teknik yang dipanggil Modified Preorder Tree Traversal. Seperti yang diterangkan oleh Joe Celko dalam "Pokok dan Hierarki dalam SQL untuk Smarties," pendekatan ini melibatkan mencipta ungkapan jadual biasa rekursif (CTE) dengan struktur berikut:

WITH RECURSIVE Descendants AS (
  SELECT id, data, parent_id
  FROM tree_table
  WHERE id = <starting_row_id>
  UNION ALL
  SELECT t.id, t.data, t.parent_id
  FROM Descendants AS T
  JOIN tree_table t ON t.parent_id = T.id
)
SELECT * FROM Descendants;
Salin selepas log masuk

CTE ini secara rekursif mengenal pasti semua baris anak untuk baris permulaan yang diberikan, kemudian meneruskan melalui hierarki sehingga ia mencapai daun nod.

Pertanyaan untuk Leluhur

Untuk mendapatkan semula semua nenek moyang baris tertentu, kita boleh menggunakan pendekatan yang serupa dengan sedikit pengubahsuaian:

WITH RECURSIVE Ancestors AS (
  SELECT id, data, parent_id
  FROM tree_table
  WHERE id = <starting_row_id>
  UNION ALL
  SELECT t.id, t.data, t.parent_id
  FROM Ancestors AS T
  JOIN tree_table t ON t.id = T.parent_id
)
SELECT * FROM Ancestors;
Salin selepas log masuk

CTE ini secara rekursif mengenal pasti semua baris induk untuk baris permulaan yang diberikan, kemudian meneruskan ke atas melalui hierarki sehingga ia mencapai nod akar.

Contoh Pelaksanaan

Contoh kerja pertanyaan ini dalam PHP boleh didapati di: http://www.sitepoint.com /article/hierarchical-data-database/2/

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyoal Keturunan dan Nenek Moyang dengan Cekap dalam Struktur Pokok MySQL?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan