Buat pertanyaan rekursif berlapis di MySQL
id | 名称 | 父ID |
---|---|---|
19 | 类别1 | 0 |
20 | 类别2 | 19 |
21 | 类别3 | 20 |
22 | 类别4 | 21 |
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
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>
MySQL 5.x Penyelesaian: Pembolehubah Kesatuan Dalaman atau Self -connection
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>
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!