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>
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!