2

对于我的问题标题含糊不清,我深表歉意,但我什至不知道该怎么称呼我要完成的工作。

描述我想要的最好的方式是我希望能够将一堆项目链接在一起,然后(可能)递归地找到所有包含目标项目的链中的所有项目。例如,请注意以下链中的 item3 :

item1 => item2 => item3 => item4
item5 => item3 => item6  
item3 => item7 => item8  
item3 => item9 => item10  
item11 => item12 => item13 => item3

如果用户要搜索item3,那么我希望显示上面的所有五个链。换句话说,我希望能够找到 item3 的所有后代和祖先,以便我可以在 HTML 表格中显示数据(或任何最有效的 HTML 结构)。
让这件事变得棘手的是(如上所示)任何给定的项目可能有许多后代和许多祖先。因此,我不确定 MySQL 中的常规递归是否有效。
我确实查看了以下 SO 线程的最佳答案中链接的两篇文章,但我认为建议的解决方案不适用于我想要的数据结构:
Mysql recursion?

有没有办法将这种数据结构化到 MySQL 数据库中,以便通过相当简单和轻量级的查询(即,希望每个项目请求一个查询),我可以获得我正在寻找的信息和结构?
非常感谢。

4

1 回答 1

0

我有一个建议。

将项目存储在以下结构中。

+---------+-----------+
|   id    |    item   |
+---------+-----------+
|   1     |   item3   |
+---------+-----------+

并在下面添加链接引用

+---------+-----------+------------+
|  itemid |  ancestor | descendant |
+---------+-----------+------------+
|  1      |  3        | 2          |
+---------+-----------+------------+
|  1      |  5        | 7          |
+---------+-----------+------------+

在所有三列上创建索引。这将使您能够添加与链上出现的时间一样多的时间。您还可以查询特定项目以查找其所有相关链接。

于 2013-02-24T03:33:55.097 回答