Я использую текстовое поле для работы с деревьями в SQL. Это проще, чем использовать левые / правые значения.
Давайте возьмем пример из статьи MySQL:
+-----------------------+
| name |
+-----------------------+
| ELECTRONICS |
| TELEVISIONS |
| TUBE |
| LCD |
| PLASMA |
| GAME CONSOLES |
| PORTABLE ELECTRONICS |
| MP3 PLAYERS |
| FLASH |
| CD PLAYERS |
| 2 WAY RADIOS |
| FRS |
+-----------------------+
В результате получится таблица, подобная этой:
Id ParentId Lineage Name
1 null /1/ ELECTRONICS
2 1 /1/2/ TELEVISIONS
3 2 /1/2/3/ TUBE
4 2 /1/2/4/ LCD
5 2 /1/2/5/ PLASMA
6 6 /1/6/ GAME CONSOLES
7 1 /1/7/ PORTABLE ELECTRONICS
8 7 /1/7/8/ MP3 PLAYERS
9 8 /1/7/8/9/ FLASH
10 7 /1/7/10/ CD PLAYERS
11 1 /1/11/ 2 WAY RADIOS
12 11 /1/11/12/ FRS
Найдите все портативные устройства, которые вы просто используете Lineage с портативных компьютеров:
SELECT * FROM theTable WHERE Lineage LIKE '/1/7/%'
Минусы:
- Вам нужно делать ОБНОВЛЕНИЕ после каждой ВСТАВКИ, чтобы добавить PK в Lineage
Предложение:
Обычно я добавляю другой столбец, в который я помещаю путь в виде текста (например, 'electronics/televisions/tube'
)