-
Подскажите, пожалуйста, возможно ли следующее У меня есть таблица SPR_CAR в БД Firebird следующей структуры: ID ParentId Name Sheet 1 0 Вазы 0 2 0 Москвичи 0 3 1 Ваз2101 1 4 1 Ваз2106 1 5 2 Комби 1 6 0 Скутер 455 1 Таблица в программе отображается в виде дерева, поле ParentID указывает родителя, а если 0-то родитель корень. Но у машины может быть родитель и корень(как у последней позиции).Sheet- признак группа или машина.У меня должна быть такая функция как перемещение машины в другую группу, поэтому в программе вываливается диалог в котором спрашивается в какую группу переместить машину, выполняется SQL: select ID,Name from SPR_CAR where Sheet=0 который выдает две строки Вазы и Москвичи. Как можно в выборку добавить свою строчку где ID=0 Name='Корень' ? Может быть както SQL-запрос можно изменить(может union)? Не могу придумать.
-
select ID,Name from SPR_CAR where (Sheet=0) or (ParentId =0)
-
> [0] AlexeyMir (10.04.08 13:13)
Я бы подумал в сторону логической оптимизации структуры. ИМХО надо сделать так, что бы невозможно было внести машину в корень дерева. Например ввести псевдо группу "Разное". Это упростит, ИМХО, работу с таблицей.
Наличие поля Sheet вообще вызывает у меня сомнение, т.к. подгрупп я в примере не увидел. Если (по моим догадкам) уровней будет строго 2, то может быть стОит перейти на простую двухтабличную М-Д связь?
-
> Как можно в выборку добавить свою строчку где ID=0 Name='Корень' > ?
А она откуда возьмется ? В таблице-то нет записи с такими атрибутами .. Можно, конечно, ХП для этой цели прикрутить, но, imho, здесь требуется серьезный пересмотр древесной структуры и логики.
-
А почему бы в таблицу не добавить корневую запись?
ID ParentId Name Sheet 0 0 Корень 0
-
> kaif © (10.04.08 19:44) [4] > А почему бы в таблицу не добавить корневую запись? > > ID ParentId Name Sheet > 0 0 Корень 0 > <Цитата>
И это самое лучшее решение.
|