对于我的问题标题含糊不清,我深表歉意,但我什至不知道如何称呼我想要完成的事情。
描述我想要的东西的最佳方式是我希望能够将一堆项目链接在一起,然后(可能)递归地找到属于包含目标项目的任何链的一部分的所有项目。例如,注意以下链中的 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 数据库中,以便通过相当简单和轻量级的查询(即,希望每个项目请求一个查询),我可以获得我正在寻找的信息和结构?< br/> 非常感谢。
最佳答案
我有一个建议。
在以下结构中存储项目。
+---------+-----------+
| id | item |
+---------+-----------+
| 1 | item3 |
+---------+-----------+
并在下面添加链接引用
+---------+-----------+------------+
| itemid | ancestor | descendant |
+---------+-----------+------------+
| 1 | 3 | 2 |
+---------+-----------+------------+
| 1 | 5 | 7 |
+---------+-----------+------------+
在所有三列上创建索引。这将使您能够添加与出现在链上的相同时间一样多的时间。 您还可以查询特定项目以查找其所有相关链接。
关于mysql - 我如何构造在 MySQL 数据库中链接在一起的一堆项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15048325/