Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Cari Semua Rekod Induk dalam Jadual MySQL Menggunakan Pertanyaan Rekursif Tunggal?

Bagaimanakah Saya Boleh Cari Semua Rekod Induk dalam Jadual MySQL Menggunakan Pertanyaan Rekursif Tunggal?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-06 18:59:12399semak imbas

How Can I Find All Parent Records in a MySQL Table Using a Single Recursive Query?

Mencari Ibu Bapa dalam Jadual MySQL dengan Rekursi

Dalam skema pangkalan data, mewujudkan perhubungan hierarki adalah perkara biasa. Apabila menanyakan data sedemikian, ia menjadi perlu untuk mendapatkan bukan sahaja rekod tertentu tetapi juga sambungan hierarkinya. Artikel ini akan menangani tugas mencari semua ibu bapa rekod dalam jadual MySQL menggunakan satu pertanyaan.

Pernyataan Masalah

Diberikan jadual dengan ID lajur, TITLE , CONTROLLER, METHOD dan PARENT_ID, cari semua ibu bapa rekod dengan TITLE ialah "Kategori" menggunakan satu SQL pertanyaan.

Output yang Diingini

Output hendaklah memaparkan perkara berikut lajur:

  • id
  • tajuk
  • pengawal
  • kaedah
  • url
  • id_ibubapa

dan harus mengambilnya rekod:

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

Untuk mencapai output yang diingini, kita perlu memanfaatkan keupayaan pertanyaan rekursif MySQL. Berikut ialah pertanyaan SQL yang boleh kita gunakan:

SELECT T2.id, T2.title,T2.controller,T2.method,T2.url
FROM (
    SELECT
        @r AS _id,
        (SELECT @r := parent_id FROM menu WHERE id = _id) AS parent_id,
        @l := @l + 1 AS lvl
    FROM
        (SELECT @r := 31, @l := 0) vars,
        menu m
    WHERE @r <> 0) T1
JOIN menu T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC;

Mari kita pecahkan pertanyaan ini:

  • Pertanyaan dalaman (SELECT @r AS _id, ...) menjana hierarki rekod dengan memilih PARENT_ID secara rekursif dan menambah tahap.
  • Pertanyaan luar (PILIH T2.id, ...) menyertai pertanyaan dalam dengan menu jadual asal (dinamakan semula kepada T2) untuk mendapatkan data yang diingini.
  • Klausa ORDER BY mengisih keputusan mengikut tahap dalam tertib menurun.

Dengan melaksanakan pertanyaan ini, kami boleh mendapatkan semula semua ibu bapa rekod dengan TITLE sebagai "Kategori" dalam satu pangkalan data panggil.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Semua Rekod Induk 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