您可以使用 嵌套集模型,
因为它可以产生非常有效的查询。检出在MySQL中管理分层数据,并阅读称为 嵌套集模型 的部分。
如果您使用的是Doctrine之类的ORM,则它包含嵌套集功能。
它可以是很难对一些把握的嵌套组的概念 左 和 右。 我发现使用这些数字作为XML文档中打开/关闭标签的行号的类比,人们发现它更容易掌握。
例如,以上面的MySQL链接为例:
+-------------+----------------------+-----+-----+| category_id | name | lft | rgt |+-------------+----------------------+-----+-----+|1 | ELECTRonICS | 1 | 20 ||2 | TELEVISIONS | 2 | 9 ||3 | TUBE | 3 | 4 ||4 | LCD | 5 | 6 ||5 | PLASMA | 7 | 8 ||6 | PORTABLE ELECTRonICS | 10 | 19 ||7 | MP3 PLAYERS | 11 | 14 ||8 | FLASH | 12 | 13 ||9 | CD PLAYERS| 15 | 16 || 10 | 2 WAY RADIOS | 17 | 18 |+-------------+----------------------+-----+-----+
如果使用 lft , rgt 字段并将其用作XML文档的行号,则会得到:
1. <electronics>2. <televisions>3. <tube>4. </tube>5. <lcd>6. </lcd>7. <plasma> 8. </plasma> 9. </televisions>10. <portable electronics>11. <mp3 players>12. <flash>13. </flash>14. </mp3 players>15. <cd players>16. </cd players>17. <2 way radios>18. </2 way radios>19. </portable electronics>20. </electronics>
以这种方式查看它可以使某些人更容易可视化嵌套集的层次结构。它还使这种方法提高效率的原因更加明确,因为它可以选择整个节点而无需多个查询或联接。



