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
DDDasal
2025-01-06 18:24:10485semak imbas

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;

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;

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!

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