powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск корневого каталога
5 сообщений из 5, страница 1 из 1
Поиск корневого каталога
    #39620871
AlexPF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, all!

Есть задача, помогите с идеями для алгоритма.
Таблица содержит поля: Имя пользователя, Путь к файловым ресурсам.
Для каждого пользователя путь к ресурсам может иметь несколько корневых каталогов, и эти корневые каталоги не заданы явно
.Задача в том чтобы "вычислить" из всего множества строк для пользователя только корневые каталоги или каталог.
Напрашивается перебор строк с анализом вхождения друг в друга, но как подобрать критерий определения корня не хватает фантазии.
...
Рейтинг: 0 / 0
Поиск корневого каталога
    #39620893
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexPF,
Примерчик бы не помешал. Так лом фантазировать, что там за каталоги и корни.
...
Рейтинг: 0 / 0
Поиск корневого каталога
    #39620899
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача сводится к поиску общей подстроки. Формально это поиск такого N, что количество подстрок с начала значения поля для COUNT(DISTINCT LEFT(field, N)) и COUNT(DISTINCT LEFT(field, N+1)) не равны, и соответственно LEFT(field, N) и есть корень (с учётом удаления из подстроки фрагмента после последнего слэша, само собой).

Однако подобный подход требует жёсткой формулировки, как идентифицировать несколько корней. Например, если у пользователя 100 файлов в c:\temp и 100 в c:\tmp, то это можно посчитать и как 2 отдельных корня, и как 200 файлов в одном корне c:\. Так что думайте над формулировками.
...
Рейтинг: 0 / 0
Поиск корневого каталога
    #39620919
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexPF,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare @tmp table (
UserID int,
Path varchar(1000));
insert into @tmp values 
(1,'c:\docs\My\'),
(1,'c:\docs\Old\'),
(1,'c:\docs\'),
(2,'c:\docs\Old\'),
(2,'c:\tmp\Old\'),
(2,'c:\temp\');

Select * From @tmp a
Where not exists (Select 1 From @tmp b Where a.UserID = b.UserID  and a.Path like b.Path+'%' and a.Path<>b.Path)
...
Рейтинг: 0 / 0
Поиск корневого каталога
    #39620938
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexPF,

для одного котолога MIN(LEN(путь)) :)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск корневого каталога
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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