К написанию этой статьи сподвигли многие часы раздумий и экспериментов в области построения иерархических списков. Изначально логика обкатывалась на SQL запросах на стороне СУБД, но особенности этого языка заставили выполнить реализацию на стороне приложения PHP. Здесь я покажу как пройти от корня иерархии до каждого конечного элемента и обратно, логика реализуема на любом языке программирования.
Итак, тестовая иерархия, с которой нам предстоит работать:
В базе данных имеется самая простая таблица на самом простом MSSQL сервере, тонкости подключения опустим, наша цель — разобраться с иерархией и рекурсией.
Создадим таблицу:
CREATE TABLE [dbo].[Test](
[uid] [int] IDENTITY(1,1) NOT NULL, -- уникальное поле, автоинкрементное
[pid] [int] NULL, -- это поле указывает на элемент уровнем выше, содержит uid родителя
[name] [varchar](255) NULL,
[access] [varchar](50) NULL, -- права доступа
) ON [PRIMARY]