Вы можете использовать Модель вложенного набора , поскольку она дает очень эффективные запросы. Изучите Управление иерархическими данными в MySQL и прочитайте раздел под названием Модель вложенного набора .
Если вы используете ORM, такой как Doctrine, включает возможности вложенного набора .
Некоторым может быть трудно понять понятия вложенного множества влево и вправо. Я обнаружил, что использование этих чисел в качестве аналогии для номеров строк открытия / закрытия теги в 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>
Видя это таким образом, некоторые могут намного проще визуализировать результирующую иерархию вложенных множеств. Кроме того, становится понятнее, почему этот подход повышает эффективность, поскольку позволяет выбирать целые узлы без необходимости нескольких запросов или объединений.