在 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中文网其他相关文章!