Rumah > pangkalan data > tutorial mysql > Bagaimana untuk membuat pertanyaan rekursif hierarki di MySQL?

Bagaimana untuk membuat pertanyaan rekursif hierarki di MySQL?

Linda Hamilton
Lepaskan: 2025-01-25 16:02:14
asal
889 orang telah melayarinya

How to Create Hierarchical Recursive Queries in MySQL?

Buat pertanyaan rekursif berlapis di MySQL

memahami struktur hierarki

Buat pertanyaan berlapis di MySQL, dan anda perlu memahami bagaimana struktur hierarki dibina. Pertimbangkan jadual contoh berikut:

id 名称 父ID
19 类别1 0
20 类别2 19
21 类别3 20
22 类别4 21
Dalam jadual ini,

lajur mewakili ID kelas induk dalam kategori yang diberikan. Sebagai contoh, 19 kategori 2 adalah 19, menunjukkan bahawa ia adalah sub -kategori Kategori 1. parent_id parent_id MySQL 8 Penyelesaian: Recursively dengan

untuk versi MySQL 8 dan ke atas, anda boleh menggunakan rekursif dengan tatabahasa:

Pertanyaan ini akan mengambil semua kategori subkat ID Bapa yang diberikan (19 dalam contoh ini). Output akan merangkumi semua kategori langsung atau tidak langsung yang dimiliki oleh Kategori 1 (ID = 19).
<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
  INNER JOIN cte ON p.parent_id = cte.id
)
SELECT * FROM cte;</code>
Salin selepas log masuk

MySQL 5.x Penyelesaian: Pembolehubah Kesatuan Dalaman atau Self -connection

Untuk versi MySQL yang lebih tua (5.x), terdapat dua kaedah alternatif:

Pembolehubah Neilian:

Pertanyaan ini menggunakan fungsi khusus MySQL untuk memperuntukkan dan mengubah suai pembolehubah semasa pelaksanaannya. Dengan permulaan pembolehubah

dengan ID induk (19), dan menggunakan fungsi
<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
untuk memeriksa sama ada

muncul dalam senarai Descendants, kami secara beransur -ansur boleh membina senarai ID keturunan. @pv FIND_IN_SET self -connection: parent_id

Pertanyaan ini menggunakan ID induk yang disambungkan sendiri (19) untuk melintasi struktur hierarki. Dengan menyambungkan sub -watch dengan jadual induk mengikut lajur , kita boleh mengekstrak secara rekursif semua keturunan ibu bapa -level.

Atas ialah kandungan terperinci Bagaimana untuk membuat pertanyaan rekursif hierarki di MySQL?. 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