Pertanyaan Hierarki dalam MySQL: Mendapatkan Perhubungan Leluhur
Untuk mengurus data hierarki dengan berkesan, MySQL menawarkan pertanyaan rekursif yang berkuasa yang boleh menavigasi perhubungan pada sebarang kedalaman . Ini amat berguna apabila anda perlu mengekstrak perhubungan nenek moyang.
Pertimbangkan struktur perhubungan berikut, dengan 'a' mewakili medan induk dan 'b' mewakili medan anak:
| a | b | ----------- | 1 | 2 | | 2 | 3 | | 3 | 4 | | 4 | 5 | | 3 | 6 | | 4 | 7 |
Masalah: Memandangkan nilai medan anak (mis., 5), tentukan semua medan induk, datuk nenek dan sebagainya hidup, tanpa mengira kedalaman dalam hierarki.
Penyelesaian:
MySQL menyediakan Ungkapan Jadual Biasa (CTE) rekursif yang membolehkan anda menavigasi perhubungan hierarki dengan cekap:
WITH RECURSIVE Ancestors AS ( SELECT * FROM mytable WHERE b = 5 UNION ALL SELECT t1.* FROM mytable t1 JOIN Ancestors t2 ON t1.a = t2.b ) SELECT a, b FROM Ancestors;
Pertanyaan ini mencipta CTE rekursif bernama 'Nenek moyang' yang secara berulang mengenal pasti ibu bapa setiap medan anak dalam hierarki. CTE bermula dengan memilih medan anak dengan nilai 5 (iaitu, 5). Ia kemudiannya menggabungkan 'mytable' kepada dirinya sendiri menggunakan medan 'a' (ibu bapa) dan 'b' (anak). Proses rekursif ini berterusan sehingga tiada lagi medan induk untuk diambil.
Pernyataan SELECT akhir mengekstrak kedua-dua medan 'a' (ibu bapa) dan 'b' (anak) daripada CTE 'Ancestors', memberikan perhubungan hierarki yang diingini.
Apabila dilaksanakan, pertanyaan ini mengembalikan yang berikut keputusan:
a | b ----------- 1 | 2 2 | 3 3 | 4 4 | 5
Oleh itu, ia berjaya mendapatkan semula ibu bapa, datuk dan nenek dan nenek moyang selanjutnya nilai medan anak yang disediakan.
Atas ialah kandungan terperinci Bagaimanakah Pertanyaan Rekursif MySQL Boleh Mendapatkan Semula Semua Nenek Moyang Nod Anak Diberikan dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!