通过引用链接中的表,我具有表类别和另一个表名称“包”来存储类别ID。
http://ftp.nchu.edu.tw/MySQL/tech-resources/articles/hierarchical-data.html

Category
+-------------+----------------------+--------+
| category_id | name                 | parent |
+-------------+----------------------+--------+
|           1 | ELECTRONICS          |   NULL |
|           2 | TELEVISIONS          |      1 |
|           3 | TUBE                 |      2 |
|           4 | LCD                  |      2 |
|           5 | PLASMA               |      2 |
|           6 | PORTABLE ELECTRONICS |      1 |
|           7 | MP3 PLAYERS          |      6 |
|           8 | FLASH                |      7 |
|           9 | CD PLAYERS           |      6 |
|          10 | 2 WAY RADIOS         |      6 |
+-------------+----------------------+--------+


无论如何,在不知道我必须加入多少次之前,我可以离开加入直到没有父母离开了吗?

第二个问题,我的表“ package”仅存储最后一个/最小的类别ID,例如表中的“ 7-FLASH”,这是一个很好的做法,它仅存储最后/最小的类别ID,并通过加入餐桌?这样做是否会使每次查询都使数据库沉重?

提前致谢!

最佳答案

在MySQL中无法进行此类查询。

如果需要保持此数据库结构,则最快的方法可能是从表中选择相关数据,然后将客户端的数据处理到方法数组/联接中。

如果您无法充分缩小要选择的行数,则上述方法可能无法正常工作,在这种情况下,递归运行多个查询可能会更快。在第二个查询中,最好的方法是执行WHERE ID IN(list_of_parent_values)之类的操作,而不是每个父级执行1个查询。

最后,如果您可以更改数据结构,则可以使用一种特殊的树列值来通过单个SQL查询有效地选择所有节点。但是,需要更多的工作来插入和重新组织树。
有许多稍微不同的实现,请参见此处进行这样的讨论:
http://web.archive.org/web/20110606032941/http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

awesome_nested_set也是此模式的ruby实现:
https://github.com/collectiveidea/awesome_nested_set

07-26 07:23