Sie können ein Nested Set Model verwenden da es sehr effiziente Abfragen liefert. Sehen Sie sich Managing Hierarchical Data in MySQL an und lesen Sie den Abschnitt namens Nested Set Model .
Wenn Sie ein ORM wie Doctrine verwenden, ist es beinhaltet verschachtelte Set-Fähigkeiten .
Für einige kann es schwierig sein, die verschachtelten Mengenkonzepte von links zu verstehen und richtig. Ich habe festgestellt, dass die Verwendung dieser Zahlen als Analogie für die Zeilennummern von Open/Close-Tags in einem XML-Dokument einfacher zu verstehen ist.
Nehmen Sie zum Beispiel das Datenbeispiel aus dem obigen MySQL-Link:
+-------------+----------------------+-----+-----+
| 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 |
+-------------+----------------------+-----+-----+
Wenn Sie die lft nehmen , rgt Felder und verwenden Sie sie als Zeilennummern für ein XML-Dokument, erhalten Sie:
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>
Wenn Sie es so sehen, kann es für einige viel einfacher sein, sich die resultierende verschachtelte Mengenhierarchie vorzustellen. Es wird auch klarer, warum dieser Ansatz die Effizienz verbessert, da er es ermöglicht, ganze Knoten auszuwählen, ohne dass mehrere Abfragen oder Verknüpfungen erforderlich sind.