mysql - 在单个 Ruby/MySQL 查询中加载整个链表

标签 mysql ruby linked-list

我将数据链表存储在如下记录中:

CREATE TABLE IF NOT EXISTS `data_nodes` (
  `record_id` int(11) NOT NULL,
  `prev_node` int(11) NOT NULL,
  `data` varchar(200) NOT NULL,
  PRIMARY KEY  (`record_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

其中 prev_node 是列表中前一项的 record_id,如果我们位于列表中的第一项,则为 0。

典型的列表可能类似于:

record_id     prev_node     data
---------     ---------     ----
1             0             first item
12            1             second item
27            12            third item

我正在使用 Ruby 的 mysql 模块,我想做的是:给定列表中最后一项的记录号,在单个查询中加载整个列表。 (例如,给定记录 id 27,返回包含“第一项”、“第二项”、“第三项”的结果集)

这可以做到吗?

谢谢。

最佳答案

任何固定高度N的树都可以,但是如果树高变成N+1,你就不能做这个操作。

换句话说,如果您知道有多少层父/子节点,您可以按照此处的说明构建查询(搜索Retrieving a Single Path):http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

您可以使用嵌套集模型和 RoR 插件 acts_as_nested_set 来获得您想要的结果。

如果您需要这篇文章的帮助,请告知。

关于mysql - 在单个 Ruby/MySQL 查询中加载整个链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2142803/

相关文章:

ruby-on-rails - 使用 Time.now 在哪里查询

algorithm - 链表 :How can we tell if the usage of a dummy node is absolute necessity?

php - 从一个表中获取数据到另一个表

sql - 如何在 Rails + Postgres 中重命名 hstore 键

ruby-on-rails - 在 Rails 中建立 has_many 关系

c - 添加多个患者 C 指针

c++ - C++程序因链接列表而崩溃

PHP/MySQL : Date lower than today

MySQL 聚合计数总和

mysql - 如果 mysql 使用下划线,它们还会使用我的索引吗