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
Lepaskan: 2025-01-25 15:57:09
asal
891 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk
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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan