左连接表,直到没有父和表结构

时间:2015-03-27 07:58:03

标签: mysql

通过引用链接中的表格,我有表格类别和另一个表格名称" 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并通过加入表引用它?这个动作每次都会通过查询来使数据库变重吗?

提前致谢!

1 个答案:

答案 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