Я создаю сетевой файловый менеджер для управления документами.Пользователи имеют доступ к своим файлам и могут удалять файлы.При удалении есть возможность получить файлы / папки.Путь к файлам хранится в базе данных с логическим полем: IsActive, которое указывает, был ли удален файл / папка.
Табличная структура в базе данных выглядит следующим образом:
Name IsDirectory IsActive Path Parent
----------------------------------------------------------------------------------------------
1.txt 0 0 /Home/usr1/New Folder/1.txt /Home/usr1/New Folder/
a 1 0 /Home/usr1/New Folder/Docs /Home/usr1/New Folder/
2.txt 0 0 /Home/usr1/New Folder/Docs/2.txt /Home/usr1/New Folder/Docs
Как видно, пользователь удаляет файл (1.txt) из «Новой папки» и удаляет папку«Документы», который содержит «2.txt».Я показываю это, чтобы пользователь мог восстановить или навсегда удалить файл или папку.Я также перехватываю родительскую папку в папке / файле.Таким образом, логично, когда я отображаю данные, файл 2.txt не должен быть виден, но должен быть виден его родитель, то есть папка Docs.
Как мне написать запрос, чтобы получить правильные данные.Мой текущий запрос помогает в выборе отдельного Родителя, чей Родитель не находится в Путь, и затем присоединяется к нему для извлечения записей.
WITH parents AS
(SELECT DISTINCT par.Parent
FROM tblFilesNFolders par
WHERE par.Parent NOT IN (SELECT DISTINCT Path FROM tblFilesNFolders WHERE IsActive = 0)
AND par.IsActive = 0)
SELECT grid.Name, grid.IsDirectory, grid.IsActive, grid.Path, grid.Parent
FROM tblFilesNFolders grid
INNER JOIN parents ON grid.Parent = parents.Parent
WHERE grid.IsActive = 0 AND grid.Path LIKE '/Home/usr1%'
Мне удалось получить начальный уровень, но когда я изменил путь как /Home/usr1/New Folder/Docs%
не показывает файл 2.txt.
Каким должен быть мой запрос?