通过引用链接中的表格,我有表格类别和另一个表格名称" package"存储类别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 |
+-------------+----------------------+--------+
无论如何,我可以离开加入,直到没有父母离开而不知道我有多少次加入?
第二个问题,我的表"包"只存储最后/最小的类别ID,例如在表中是" 7 - FLASH",是一个很好的做法,只存储最后/最小的类别ID并通过加入表引用它?这个动作每次都会通过查询来使数据库变重吗?
提前致谢!
答案 0 :(得分:0)
在MySQL中无法进行此类查询。
如果您需要保留此数据库结构,那么最快的方法可能是从表中选择相关数据,然后将数据客户端处理到进程数组/连接中。
如果您无法充分缩小SELECT输出的行数,则上述操作可能无法正常工作,在这种情况下,递归运行多个查询可能会更快。在第二个查询中,最好的方法是执行类似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