在MySQL 中擷取鍊錶資料
在MySQL 資料庫中,您會遇到如下所示的表格結構:
table id INT NOT NULL PRIMARY KEY data ... next_id INT NULL
任務是根據鍊錶的順序檢索資料。以下列資料為例:
id | next_id |
---|---|
1 | 2 |
2 | 4 |
3 | 9 |
4 | 3 |
9 | NULL |
結果應依下列順序:1, 2, 4, 3, 9。
但是,與某些資料庫(例如Oracle 和Microsoft SQL Server、MySQL 不支援遞歸查詢。這個問題類似於在SQL 資料庫中表示一棵樹,特別是一棵細長的樹。
存在著管理此類資料結構的各種解決方案:
限制查詢的“深度”,利用以下技術:
<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>
儘管性能緩慢,但此查詢為每個連結列表產生一行。
以上是如何在不使用遞歸查詢的情況下從 MySQL 中的鍊錶檢索資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!