Rumah >pangkalan data >tutorial mysql >Bagaimanakah saya dapat mengambil data hierarki dengan cekap di MySQL menggunakan pertanyaan rekursif?
Pertanyaan Rekursif MySQL: Data Hierarki Pemprosesan Kecekapan Tinggi
Banyak tahap struktur data, seperti sistem fail atau gambarajah struktur tisu, memerlukan kaedah yang cekap untuk mendapatkan data berdasarkan hubungan ibu bapa -anak. MySQL menyediakan pelbagai kaedah untuk menulis pertanyaan rekursif yang berkesan melintasi struktur ini.
MySQL 8 Penyelesaian Tatabahasa Rekursif
Cukup gantikan nilai ke ID nod induk yang anda mahu mengambil nod anak anda.
<code class="language-sql">WITH RECURSIVE cte (id, name, parent_id) AS ( SELECT id, name, parent_id FROM products WHERE parent_id = 19 UNION ALL SELECT p.id, p.name, p.parent_id FROM products p JOIN cte ON p.parent_id = cte.id ) SELECT * FROM cte;</code>
penyelesaian ID Path MySQL 5.x parent_id = 19
Sekarang, pertanyaan berikut akan mengambil semua sub -nodes kategori1:
ID | NAME |
---|---|
19 | category1 |
19/1 | category2 |
19/1/1 | category3 |
19/1/1/1 | category4 |
MySQL 5.x Satu lagi pilihan adalah untuk membuat pertanyaan rekursif dengan pembolehubah dalaman, ID jalan atau self -sconnection. Berikut adalah contoh pembolehubah dalaman:
<code class="language-sql">SELECT * FROM products WHERE id LIKE '19%'</code>
Ringkasan
<code class="language-sql">SELECT id, name, parent_id FROM (SELECT * FROM products ORDER BY parent_id, id) products_sorted, (SELECT @pv := '19') initialisation WHERE FIND_IN_SET(parent_id, @pv) AND LENGTH(@pv := CONCAT(@pv, ',', id))</code>MySQL menyediakan pelbagai kaedah untuk menulis pertanyaan rekursif untuk memproses data hierarki. Kaedah untuk dipilih bergantung kepada keperluan khusus versi dan pertanyaan MySQL.
Atas ialah kandungan terperinci Bagaimanakah saya dapat mengambil data hierarki dengan cekap di MySQL menggunakan pertanyaan rekursif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!