Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Web > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 19.05.2008, 09:52   #1
ADSoft
Профессионал
 
Регистрация: 25.02.2007
Адрес: Татарстан
Сообщений: 3,326
Репутация: 912

icq: 303-206-418
skype: ad-soft.info
По умолчанию Рекурсивный SQL запрос

Имеется MySQL, в ней таблица table реализующая структуру каталога с полями
id
sub_id
...
...
...
где id - уникальный идентификатор каждого элемента каталога
а sub_id - ссылка этого элемента на родительский элемент

как бы написать SQL запрос, который выдаст все элементы, которые "ниже"/"выше" заданного id ....
то есть все вложенные элементы/или наоборот...... подозреваю что это делать с помощью рекурсий... но как конкретно - не знаю....
Может кто что подскажет?
ADSoft вне форума   Ответить с цитированием
Старый 19.05.2008, 11:46   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
Репутация: 590
По умолчанию

ADSoft, уточните. Я бы сказал, что скорее не рекурсий, а суб-запросов, благо mysql, начиная с версии 4 с чем-то, их поддерживает, но целиком схему, которая нужна, по Вашему описанию не смог себе вообразить....
B_N вне форума   Ответить с цитированием
Старый 19.05.2008, 12:39   #3
ADSoft
Профессионал
 
Регистрация: 25.02.2007
Адрес: Татарстан
Сообщений: 3,326
Репутация: 912

icq: 303-206-418
skype: ad-soft.info
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
ADSoft, уточните. Я бы сказал, что скорее не рекурсий, а суб-запросов, благо mysql, начиная с версии 4 с чем-то, их поддерживает, но целиком схему, которая нужна, по Вашему описанию не смог себе вообразить....
...возможно неверно выразился......точнее как сказать..... попробую....
Есть таблица элементов каталога, каждый элемент определятся полями Id - уникальным номером, и Sub_id - принадлежность к родителю (указывается id того элемента которому принадлежит....если корень то 0)
.... задача - при выборе элемента - найти все множество элементов принадлежащих ему и далее (как ветка дерева)/ ну и как частный случай - не принадлежащих......
вот тут подсказывают что как то через Distinct и INNER JOIN...а как конкретно низнаю
ADSoft вне форума   Ответить с цитированием
Старый 24.05.2008, 23:09   #4
Feniks_infinity
Новичок
 
Аватар для Feniks_infinity
 
Регистрация: 24.05.2008
Сообщений: 1
Репутация: 10
По умолчанию

не знаю как на счет MySQL, а в Oracle работает:

SELECT LPAD(' ', 2*LEVEL)|| sub_id
FROM table
START WITH id=....
CONNECT BY PRIOR id= sub_id;
->> выдает sub_id, принадлежащие выбранному id
Feniks_infinity вне форума   Ответить с цитированием
Старый 25.05.2008, 09:07   #5
ADSoft
Профессионал
 
Регистрация: 25.02.2007
Адрес: Татарстан
Сообщений: 3,326
Репутация: 912

icq: 303-206-418
skype: ad-soft.info
По умолчанию

Э..... выбрать все элемены у который sub_id = id не проблемма....
надо все деево выбрать! то есть и те элементы, которые в сою очередь ринадлежат sub_id ...итд итп....
я так уже понял чистым SQL не разобраться... поцедуры нада писать в самом API или создавать хранимые процедуры... которых в MySQL нет
ADSoft вне форума   Ответить с цитированием
Старый 02.06.2008, 16:55   #6
Domovoy
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 254
Репутация: 85
По умолчанию

Код:

  DECLARE @tree TABLE (id int, ParentID int, [level] int)
  DECLARE @level int
  SET @level = 0
  INSERT INTO @tree (id, ParentID, [level])
  VALUES(@idNode, @idNode, @level)
  WHILE 1 = 1
  BEGIN
	INSERT @tree (id, ParentID, [level])
	SELECT v.idNode, v.idParent, @level + 1
	FROM dbo.dbtree v
	  INNER JOIN @tree t ON t.id = v.idParent AND t.level = @level
       where V.idDBTree=@DBTreeID
	IF @@ROWCOUNT = 0 
         BREAK
	SET @level = @level + 1
  END
  select * from @tree

Думаю лутшего метода быть не может
Domovoy вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50
SQL запрос Uomo БД в Delphi 17 23.04.2008 14:12
Запрос Инночка БД в Delphi 2 23.04.2008 13:19
SQL запрос SERG1980 БД в Delphi 6 19.10.2007 23:03
SQL-запрос Elena БД в Delphi 3 17.05.2007 15:13


00:37.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru