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
Lepaskan: 2024-12-08 07:31:11
asal
588 orang telah melayarinya

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

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

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

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