powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Поиск в дереве
14 сообщений из 14, страница 1 из 1
Поиск в дереве
    #39366793
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Пусть есть дерево.
Нужно найти в дереве три слова, что бы они лежали на одной ветке. Как такое делают в sql?
...
Рейтинг: 0 / 0
Поиск в дереве
    #39366814
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вы правда считаете, что на этот вопрос можно что-то вменяемое ответить?

Какое дерево? Какие слова? Деревья чего? При чём тут SQL? Если SQL, то какова схема данных? Если SQL, то какой диалектН?
...
Рейтинг: 0 / 0
Поиск в дереве
    #39366819
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучИ вы правда считаете, что на этот вопрос можно что-то вменяемое ответить?

Какое дерево? Какие слова? Деревья чего? При чём тут SQL? Если SQL, то какова схема данных? Если SQL, то какой диалектН?

Структура обычная для дерева:
id, parent_fk, name. Поиск осуществляется по полю name.
...
Рейтинг: 0 / 0
Поиск в дереве
    #39366823
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучИ вы правда считаете, что на этот вопрос можно что-то вменяемое ответить?

Какое дерево? Какие слова? Деревья чего? При чём тут SQL? Если SQL, то какова схема данных? Если SQL, то какой диалектН?

Интересует подход к такому поиску.
...
Рейтинг: 0 / 0
Поиск в дереве
    #39366847
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подход простой: использование рекурсивного CTE.
...
Рейтинг: 0 / 0
Поиск в дереве
    #39366878
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПодход простой: использование рекурсивного CTE.

А от рекурсии избавится можно?
...
Рейтинг: 0 / 0
Поиск в дереве
    #39366913
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно. Сменив структуру хранения на nested set или иную, заточенную под деревья. Либо ввести поле материализованного полного пути.
...
Рейтинг: 0 / 0
Поиск в дереве
    #39367271
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Avenger__Dimitry SibiryakovПодход простой: использование рекурсивного CTE.

А от рекурсии избавится можно?
Надо наверное начать не с середины а с основ. И вспомнить что есть 3 формы
представление дереьвев в БД. Инверсные списки, Вложенные множества, И материализация путей.
Можно конечно предположить что автор хочет вариант №1 но хотелось-бы уточнить сразу.

По поводу веток, вагонки, бруса и прочих пило-материалов. Ну нет такого. Не принята
такая терминология!

Есть корень. Есть узлы. И есть листовые узлы. И есть понятие уровня (level) в дереве.
Корню соответствует наименьший level.

Для среза всех узлов в инверсном списке можно использовать виртуальную колонку level
типа:

Код: sql
1.
.... WHERE level=N ....


или

Код: sql
1.
....GROUP by level



Про рекурсию в SQL говорить безсмысленно. Она просто не определена как актор этой системы.
Можете считать что ее нету.
...
Рейтинг: 0 / 0
Поиск в дереве
    #39367419
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПро рекурсию в SQL говорить безсмысленно.
Можете считать что ее нету.

В "чистом" SQL нету... Но вот в расширениях, типа T-SQL (в виде with... select...), очень даже есть...
...
Рейтинг: 0 / 0
Поиск в дереве
    #39367664
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Avenger__,

Такое не делают в SQL.
...
Рейтинг: 0 / 0
Поиск в дереве
    #39367787
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав C.В "чистом" SQL нету...
Есть. WITH RECURSIVE входит в ANSI стандарт SQL.
...
Рейтинг: 0 / 0
Поиск в дереве
    #39394769
Фотография alex_p_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Avenger__Добрый день!

Пусть есть дерево.
Нужно найти в дереве три слова, что бы они лежали на одной ветке. Как такое делают в sql?
with recurcive тебе в помощь
как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with recurcive tree as
(select t.id, t.parent_fk, t.name, 1 lvl
	from tablename t
	where t.parent_fk is null
	union all 
 select t.id, t.parent_fk, t.name, prior.lvl+1 lvl
	from tablename t
	inner join tree prior on prior.id = t.parent_fk)
select * from tree 
where tree.name='слово' and lvl=:ALvl


Это типа заготовка, условия сам поставвь уже, какие надо
...
Рейтинг: 0 / 0
Поиск в дереве
    #39394872
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_p_n__Avenger__Добрый день!

Пусть есть дерево.
Нужно найти в дереве три слова, что бы они лежали на одной ветке. Как такое делают в sql?
with recurcive тебе в помощь
как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with recurcive tree as
(select t.id, t.parent_fk, t.name, 1 lvl
	from tablename t
	where t.parent_fk is null
	union all 
 select t.id, t.parent_fk, t.name, prior.lvl+1 lvl
	from tablename t
	inner join tree prior on prior.id = t.parent_fk)
select * from tree 
where tree.name='слово' and lvl=:ALvl


Это типа заготовка, условия сам поставвь уже, какие надо

Ну и где тут в условии три слова, которые лежат на одной ветке? Дерево любой строить умеет.
...
Рейтинг: 0 / 0
Поиск в дереве
    #39394875
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Остановился на таком варианте поиска 20021633
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Поиск в дереве
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]