Конференция "Базы" » SQL-запрос [D5]
 
  • AlexeyMir (10.04.08 13:13) [0]
    Подскажите, пожалуйста, возможно ли следующее
    У меня есть таблица 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)?
    Не могу придумать.
  • Ega23 © (10.04.08 13:26) [1]
    select ID,Name from SPR_CAR where (Sheet=0) or (ParentId =0)

  • Sergey13 © (10.04.08 13:41) [2]
    > [0] AlexeyMir   (10.04.08 13:13)

    Я бы подумал в сторону логической оптимизации структуры. ИМХО надо сделать так, что бы невозможно было внести машину в корень дерева. Например ввести псевдо группу "Разное". Это упростит, ИМХО, работу с таблицей.

    Наличие поля Sheet вообще вызывает у меня сомнение, т.к. подгрупп я в примере не увидел. Если (по моим догадкам) уровней будет строго 2, то может быть стОит перейти на простую двухтабличную М-Д связь?
  • Сергей М. © (10.04.08 16:55) [3]

    > Как можно в выборку добавить свою строчку где ID=0 Name='Корень'
    > ?


    А она откуда возьмется ? В таблице-то нет записи с такими атрибутами ..
    Можно, конечно, ХП для этой цели прикрутить, но, imho, здесь требуется серьезный пересмотр древесной структуры и логики.
  • kaif © (10.04.08 19:44) [4]
    А почему бы в таблицу не добавить корневую запись?

    ID     ParentId    Name           Sheet
    0          0          Корень              0
  • ANB (11.04.08 18:21) [5]

    > kaif ©   (10.04.08 19:44) [4]
    > А почему бы в таблицу не добавить корневую запись?
    >
    > ID     ParentId    Name           Sheet
    > 0          0          Корень              0
    > <Цитата>

    И это самое лучшее решение.
 
Конференция "Базы" » SQL-запрос [D5]
Есть новые Нет новых   [134433   +21][b:0][p:0.001]