Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mendapatkan Data daripada Senarai Terpaut dalam MySQL Tanpa Pertanyaan Rekursif?

Bagaimana untuk Mendapatkan Data daripada Senarai Terpaut dalam MySQL Tanpa Pertanyaan Rekursif?

DDD
DDDasal
2024-11-01 02:31:02378semak imbas

How to Retrieve Data from a Linked List in MySQL Without Recursive Queries?

Mengambil Data Senarai Terpaut dalam MySQL

Dalam pangkalan data MySQL, anda menghadapi struktur jadual seperti yang disediakan di bawah:

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

Tugasnya adalah untuk mendapatkan semula data mengikut susunan senarai terpaut. Pertimbangkan data berikut sebagai contoh:

id next_id
1 2
2 4
3 9
4 3
9 NULL

Hasilnya hendaklah dalam susunan ini: 1, 2, 4, 3, 9.

Walau bagaimanapun, tidak seperti pangkalan data tertentu seperti Oracle dan Microsoft SQL Server, MySQL tidak menyokong pertanyaan rekursif. Masalah ini menyerupai mewakili pokok dalam pangkalan data SQL, khususnya pokok nipis dan memanjang.

Pelbagai penyelesaian wujud untuk mengurus struktur data jenis ini:

  • [Mewakili Struktur Pokok dalam SQL Pangkalan Data](https://stackoverflow.com/questions/2321851/what-is-the-most-efficient-elegant-way-to-parse-a-flat-table-into-a-tr)
  • [Pertanyaan SQL Rekursif](https://stackoverflow.com/questions/71469/is-it-possible-to-make-a-recursive-sql-query)

Untuk mengehadkan pertanyaan "depth," gunakan teknik berikut:

<code class="sql">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);</code>

Walaupun prestasinya lembap, pertanyaan ini menghasilkan satu baris untuk setiap senarai terpaut.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Data daripada Senarai Terpaut dalam MySQL Tanpa Pertanyaan Rekursif?. 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