Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana untuk Mendapatkan Kembali Semua Tapak Kanak-kanak dalam Pangkalan Data Hierarki dengan Cekap?

Bagaimana untuk Mendapatkan Kembali Semua Tapak Kanak-kanak dalam Pangkalan Data Hierarki dengan Cekap?

Mary-Kate Olsen
Lepaskan: 2024-11-28 14:43:11
asal
894 orang telah melayarinya

How to Efficiently Retrieve All Child Sites in a Hierarchical Database?

Mencapai Hierarki Perhubungan Ibu Bapa/Anak Dengan Berkesan

Memahami Model

Struktur jadual yang anda sediakan mewakili perhubungan hierarki melalui medan site_Id dan parent_Id. Setiap baris dalam jadual sepadan dengan tapak, dengan parent_Id merujuk ID tapak induknya. Matlamatnya adalah untuk mendapatkan semula semua kanak-kanak ID tapak yang diberikan dengan cekap.

Penghadan dengan Kaedah Semasa

Pendekatan semasa anda melibatkan berbilang pertanyaan dalam satu gelung, yang boleh menjadi tidak cekap . Untuk mengoptimumkan ini, mari kita terokai penyelesaian alternatif.

Pertanyaan Rekursif dengan PostgreSQL

Jika anda mempunyai pilihan untuk menggunakan pangkalan data yang menyokong pertanyaan rekursif, seperti PostgreSQL, anda boleh menggunakan CTE rekursif (Ungkapan Jadual Biasa) untuk merentasi hierarki dalam satu pertanyaan. Contohnya:

WITH RECURSIVE ChildSites AS (
  SELECT
    site_Id,
    parent_Id
  FROM
    site
  WHERE
    parent_Id = <input_site_id>
  UNION ALL
  SELECT
    s.site_Id,
    s.parent_Id
  FROM
    site AS s
  JOIN
    ChildSites AS cs ON s.parent_Id = cs.site_Id
)
SELECT
  *
FROM
  ChildSites;
Salin selepas log masuk

Model Data Dioptimumkan

Jika anda boleh mengubah suai model data, pertimbangkan untuk menggunakan model data yang direka khusus untuk data hierarki, seperti:

  • Jadual Penutupan: Menyimpan penutupan transitif, mengoptimumkan pertanyaan untuk nenek moyang dan keturunan.
  • Set Bersarang: Mewakili hierarki sebagai selang bersarang, membolehkan pertanyaan julat yang cekap.
  • Penghitungan Laluan: Tetapkan laluan unik kepada setiap nod, membolehkan subpokok yang cekap pertanyaan.

Menyimpan ID Root

Sebagai alternatif, anda boleh menambah lajur root_Id pada jadual untuk mengenal pasti moyang tertinggi bagi setiap tapak. Ini membolehkan pengambilan keseluruhan pokok dengan cekap menggunakan satu pertanyaan:

SELECT
  *
FROM
  site
WHERE
  root_Id = <input_root_id>;
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kembali Semua Tapak Kanak-kanak dalam Pangkalan Data Hierarki dengan Cekap?. 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