Rumah >pangkalan data >tutorial mysql >Bolehkah MySQL Dapatkan Data Senarai Terpaut Tanpa Pemprosesan Sebelah Pelanggan?

Bolehkah MySQL Dapatkan Data Senarai Terpaut Tanpa Pemprosesan Sebelah Pelanggan?

Susan Sarandon
Susan Sarandonasal
2024-11-04 08:38:30913semak imbas

Can MySQL Retrieve Linked List Data Without Client-Side Processing?

Mengambil Data Senarai Terpaut daripada Pangkalan Data MySQL

Soalan:

Diberikan jadual pangkalan data MySQL dengan struktur:

table
    id INT NOT NULL PRIMARY KEY
    data ..
    next_id INT NULL

Bolehkah anda mendapatkan semula data dalam susunan senarai terpaut menggunakan pertanyaan pangkalan data, tanpa menggunakan pemprosesan sebelah klien?

Jawapan:

Malangnya, MySQL tidak menyokong pertanyaan rekursif, yang diperlukan untuk mendapatkan semula data senarai terpaut dengan cekap. Masalah ini serupa dengan mewakili struktur pokok dalam pangkalan data hubungan.

Pendekatan Alternatif:

Rujuk soalan berikut untuk kaedah alternatif menyimpan dan mendapatkan semula seperti pokok data daripada sistem pangkalan data hubungan:

  • "Apakah cara yang paling cekap/elegan untuk menghuraikan jadual rata ke dalam pokok?"
  • "Adakah mungkin untuk membuat SQL rekursif pertanyaan ?"

Pertanyaan dengan Kedalaman Terhad:

Jika anda ingin mengehadkan kedalaman hasil pertanyaan, anda boleh menggunakan pendekatan berikut, walaupun dengan prestasi buruk:

SELECT * FROM mytable t1
 LEFT JOIN mytable t2 ON (t1.next_id = t2.id)
 LEFT JOIN mytable t3 ON (t2.next_id = t3.id)
 LEFT JOIN mytable t4 ON (t3.next_id = t4.id)
 LEFT JOIN mytable t5 ON (t4.next_id = t5.id)
 LEFT JOIN mytable t6 ON (t5.next_id = t6.id)
 LEFT JOIN mytable t7 ON (t6.next_id = t7.id)
 LEFT JOIN mytable t8 ON (t7.next_id = t8.id)
 LEFT JOIN mytable t9 ON (t8.next_id = t9.id)
 LEFT JOIN mytable t10 ON (t9.next_id = t10.id);

Hasilnya akan dikembalikan dalam satu baris untuk setiap senarai terpaut, tetapi prestasi pertanyaan akan menjadi perlahan.

Atas ialah kandungan terperinci Bolehkah MySQL Dapatkan Data Senarai Terpaut Tanpa Pemprosesan Sebelah Pelanggan?. 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