Rumah >pangkalan data >tutorial mysql >Bagaimanakah saya dapat mengambil data hierarki dengan cekap di MySQL menggunakan pertanyaan rekursif?

Bagaimanakah saya dapat mengambil data hierarki dengan cekap di MySQL menggunakan pertanyaan rekursif?

Barbara Streisand
Barbara Streisandasal
2025-01-25 15:57:09894semak imbas

How Can I Efficiently Retrieve Hierarchical Data in MySQL Using Recursive Queries?

Pertanyaan Rekursif MySQL: Data Hierarki Pemprosesan Kecekapan Tinggi

Latar Belakang:

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

MySQL 8 memperkenalkan rekursif dengan tatabahasa, yang sangat memudahkan pertanyaan 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

Sebelum MySQL 8, anda perlu menggunakan kaedah lain untuk pertanyaan rekursif. Satu kaedah adalah untuk memperuntukkan ID jalan dan membenamkan maklumat hierarki ke dalam lajur ID.

Contohnya, jadual yang mengandungi ID Path boleh ditunjukkan di bawah:

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 Pembolehubah Pautan Dalaman dan Penyelesaian Koneksi Diri

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>

Tetapkan nilai dalam sebagai ID nod induk nod untuk mengambil nod anaknya.

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!

Kenyataan:
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