标题可能措辞奇怪,但可能是因为我甚至不知道我是否在问正确的问题.
基本上我正在尝试构建的是一个“breadcrumbish”分类类型系统(如文件目录),其中每个节点都有一个父节点(root除外),每个节点可以包含数据或另一个节点.这将用于组织数据库中的电子邮件地址.我现在有一个系统,你可以创建一个“组”并向该组添加电子邮件地址,但是向它添加组织系统会非常好.
这(在我的脑海中)是树形式,但我不知道是什么树.
我遇到的问题是使用MySQL构建它.遍历内存中的树很容易,但在数据库中,它有点棘手.
树的形象:http://j.imagehost.org/0917/asdf.png
SELECT * FROM企业:
Tim’s五金店,7-11,Kwik-E-Mart,Cub Foods,Bob’s Grocery Store,CONGLOM-O
SELECT * FROM Grocery商店:
Cub Foods,CONGLOM-O
SELECT * FROM Big Grocery Stores:
CONGLOM-O
SELECT * FROM教堂:
圣彼得教堂,圣约翰教堂
我认为这应该是足够的信息,所以我可以准确地描述我的目标是什么.
您需要选择一个节点及其所有子节点吗?如果是这样,那么Nested set Model (Scroll down to the heading)对你来说可能更好.该表如下所示:
| Name | Left | Right |
| Emails | 1 | 12 |
| Business | 2 | 7 |
| Tim's | 3 | 4 |
| 7-11 | 5 | 6 |
| Churches | 8 | 11 |
| St. Pete | 9 | 10 |
那么,要在节点下面找到任何东西,就这样做
SELECT name FROM nodes WHERE Left > *yourleftnode* AND Right < *yourrightnode*
要查找节点上方的所有内容:
SELECT name FROM nodes WHERE Left < *yourleftnode* AND Right > *yourrightnode*
如果您只想查询特定级别,可以执行Adjacency List Model (Scoll down to the heading):
| Id | Name | Parent_Id |
| 1 | Email | null |
| 2 | Business | 1 |
| 3 | Tim's | 2 |
要查找同一级别的所有内容,只需执行以下操作:
SELECT name FROM nodes WHERE parent_id = *yourparentnode*
当然,没有什么可以阻止你做一个混合方法,它可以让你查询你想要的手头查询
| Id | Name | Parent_Id | Left | Right | Path |
| 1 | Email | null | 1 | 6 | / |
| 2 | Business | 1 | 2 | 5 | /Email/ |
| 3 | Tim's | 2 | 3 | 4 | /Email/Business/ |
真的,这只是你需要的问题……