Pertanyaan Rekursif untuk Pengambilan Data Hierarki dalam MySQL
Apabila berurusan dengan data hierarki dalam pangkalan data, ia sering menjadi perlu untuk mendapatkan maklumat merentas berbilang tahap perhubungan. Dalam MySQL, pertanyaan rekursif menawarkan penyelesaian yang berkuasa untuk tugas ini.
Pertimbangkan contoh berikut: Bayangkan salasilah keluarga mudah diwakili dalam jadual dengan dua lajur: 'a' dan 'b,' di mana 'a' mewakili ibu bapa dan 'b' menandakan anak. Jika kita ingin mencari semua nenek moyang (ibu bapa, datuk nenek, dll.) individu tertentu, bagaimanakah kita akan mendekatinya?
Dalam MySQL, kita boleh memanfaatkan pertanyaan rekursif untuk melintasi struktur pokok dan mendapatkan semula nenek moyang daripada nod tertentu. Katakan kita ingin mencari nenek moyang individu dengan nilai 'b' 5. Pertanyaan berikut akan mencapainya:
SELECT @id := (SELECT senderid FROM mytable WHERE receiverid = @id) AS person FROM (SELECT @id := 5) vars STRAIGHT_JOIN mytable WHERE @id IS NOT NULL
Pertanyaan ini menggunakan subkueri rekursif untuk mewujudkan hubungan antara 'a' lajur (senderid) dan 'b' (receiverid). Pertanyaan dalam memulakan pembolehubah @id ke nod yang dikehendaki (5) dan kemudian menggunakan pertanyaan luar untuk menyertai baris berikutnya secara rekursif sehingga tiada lagi nenek moyang.
Dengan melaksanakan pertanyaan ini, kami akan memperoleh hasil berikut :
person |
---|
1 |
2 |
3 |
4 |
Hasil ini menyediakan hierarki lengkap menuju ke nod dengan nilai 'b' 5, termasuk nod awal itu sendiri dan ibu bapa, datuk dan neneknya dan sebagainya. Oleh itu, pertanyaan rekursif dalam MySQL berfungsi sebagai alat yang berkuasa untuk menavigasi data hierarki dan mendapatkan maklumat terperinci merentas pelbagai peringkat perhubungan.
Atas ialah kandungan terperinci Bagaimanakah Pertanyaan Rekursif Dapat Mendapatkan Leluhur dengan Cekap dalam Data Hierarki MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!