Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencari Semua Leluhur Rekod dalam Jadual MySQL Menggunakan Pertanyaan Rekursif Tunggal?

Bagaimana untuk Mencari Semua Leluhur Rekod dalam Jadual MySQL Menggunakan Pertanyaan Rekursif Tunggal?

Linda Hamilton
Linda Hamiltonasal
2024-12-08 07:31:11570semak imbas

How to Find All Ancestors of a Record in a MySQL Table Using a Single Recursive Query?

Mencari Semua Ibu Bapa dalam Jadual MySQL dengan Pertanyaan Rekursif Tunggal

Pertimbangkan skema jadual MySQL berikut dengan data sampel:

| ID |             TITLE | CONTROLLER |            METHOD | PARENT_ID |
|----|-------------------|------------|-------------------|-----------|
|  1 |         Dashboard |      admin |         dashboard |         0 |
|  2 |           Content |      admin |           content |         0 |
|  3 |           Modules |      admin |           modules |         0 |
...

Cabaran:

Matlamat kami adalah untuk mencari semua ibu bapa rekod tertentu, iaitu satu dengan tajuk = 'Kategori', menggunakan satu pertanyaan SQL.

Output yang Diingini:

id | title        |  controller  | method      | url     | parent_id 
----------------------------------------------------------------  
3  | Modules      |   admin      | modules     | (NULL)  | 0           
17 | User Modules |   modules    | user_module | (NULL)  | 3           
31 | Categories   |   categories | category    | (NULL)  | 17       

Penyelesaian:

Kami menggunakan ungkapan jadual biasa rekursif (CTE) untuk melintasi jadual hierarki dan kenal pasti semua nenek moyang rekod yang dikehendaki:

WITH RECURSIVE Parents AS (
    SELECT id, parent_id
    FROM menu
    WHERE id = 31
    UNION ALL
    SELECT m.id, m.parent_id
    FROM Parents AS p
    JOIN menu AS m ON p.parent_id = m.id
)
SELECT m.id, m.title, m.controller, m.method, m.url, m.parent_id
FROM Parents AS p
JOIN menu AS m ON p.id = m.id
ORDER BY p.id DESC;

Penjelasan:

  • Ibu bapa CTE dimulakan dengan id rekod sasaran (31 ).
  • Bahagian rekursif pertanyaan memilih semua ibu bapa rekod semasa, meneruskan traversal.
  • Klausa ORDER BY mengisih hasil dalam tertib menurun, dengan induk terdekat muncul dahulu.

Dengan melaksanakan pertanyaan ini, kami memperoleh output yang diingini, menyenaraikan semua ibu bapa rekod Kategori.

Atas ialah kandungan terperinci Bagaimana untuk Mencari Semua Leluhur Rekod dalam Jadual MySQL Menggunakan Pertanyaan Rekursif Tunggal?. 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