Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос к дереву, sql 2000 
:(
    Опции темы
Ch0bits
Дата 18.9.2007, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 1
Всего: 62



Есть таблица с полями: ID, Node и ParentID.
Как получить все листья (узлы без детей) поддерева, заданного узлом Node?
И вообще есть ли какие-нибудь специальные средства для запросов к иерархическим таблицам?

PM WWW   Вверх
dereyly
Дата 19.9.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 1
Всего: 4



Вот рекурсивная процедурка, но можно и просто составить запрос с параметром
Код

CREATE PROCEDURE proc_derevo
(
    @id int
)
AS
BEGIN
    SET NOCOUNT ON;
    with recurse(ID,ParentID,Node)
    as
    (
    select a.ID,a.ParentID,a.Node
    from [oks].[dbo].[Razdel] a
    where a.ID=@id
    union all
    select a.ID,a.ParentID,a.Node
    from [oks].[dbo].[Razdel] a
    inner join
    recurse b
    on b.ID=a.ParentID
    )
-- мой select
    select c.*
    from recurse b
    inner join
    [oks].[dbo].[Tovar] c
    on b.ID=c.ID;
END
GO

PS: писал на SQL 2005, но на 2000 тож длжно вроде работать
PSS: или сами узлы с детьми не должны отображатся? 

Это сообщение отредактировал(а) dereyly - 19.9.2007, 16:34
PM MAIL   Вверх
Ch0bits
Дата 19.9.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 1
Всего: 62



Забыл упомянуть об одной проблеме. Я не могу изменять базу, т.е. не могу создать хранимую процедуру. Единственное что можно - один select.
Но все равно +1 за старание.
PM WWW   Вверх
VOS
Дата 1.10.2007, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 31.1.2007

Репутация: 2
Всего: 8



Попробуйте такой вариант, он без рекурсии, но с ограничением на кол-во вложений.
Получает меню в иерархическом виде (максимум 25 уровней вложенности)
Если уровней больше, то увеличить srt varbinary (100) кратно 4-м 
Для 100 уровней srt varbinary(400)
Работает шустро smile

Код

declare @root int
declare  @tree TABLE (id int, parent int, [name] varchar(100),  [level] int,  srt varbinary(100))
declare @level int 
--Поддерево
set @root=0
set @level = 0
insert @tree (id, parent, [name],[level], srt)  select @root, null,'', @level, cast(0 as varbinary(4))

 while 1=1
       begin
                insert @tree (id, parent, [name],[level], srt)  select tr.ID, tr.Parent, tr.name, @level + 1,  t.srt + CAST(tr.id AS varbinary(4))   from menu as tr   join @tree as t on t.id = tr.Parent and t.level = @level 
                if @@rowcount = 0 break
                set @level = @level + 1
      end
  delete from @tree where id=@root

select * from @tree order by srt


Это сообщение отредактировал(а) VOS - 1.10.2007, 16:24
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0704 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.