Я использую MySQL v5.7, у меня есть структура папок с двумя таблицами, подобная этой в MySQL:
папках Таблица:
|folder_id | parent_id | modified_by | updated_at |
+------------+------------+---------------+-------------------+
| 1 | NULL | Andy |2020-12-11 11:13:25|
| 2 | 1 | Andy |2020-01-26 14:22:03|
| 3 | 1 | Mary |2020-01-25 03:55:03|
| 5 | 2 | Ruby |2020-01-15 22:13:33|
| 6 | 2 | Mary |2020-01-18 00:52:44|
документы Таблица:
|document_id | folder_id | modified_by | updated_at |
+------------+------------+---------------+-------------------+
| 1 | NULL | Andy |2019-12-11 13:12:25|
| 2 | 2 | Janice |2020-01-25 01:55:03|
| 3 | 2 | Katy |2020-01-11 03:55:03|
| 5 | 3 | Mary |2020-01-12 01:55:03|
| 6 | 6 | Mary |2020-01-26 13:14:12|
Таким образом, в основном эти две таблицы предназначены для моей системы файлового менеджера, мне нужно извлечь папку и документы на основе folder_parent_id
, этот столбец должен Отметьте, если папка находится внутри другой папки, так что другая папка будет родительской. если parent_id
равно NULL
, это означает, что папка находится в root каталога. Что касается документа, он может находиться в другой папке или в каталоге root (folder_id
имеет значение null). Я использую этот запрос для слияния папки и документов:
SELECT folder_id,
NULL AS document_id, modified_by, updated_at
FROM folders
WHERE parent_id = given_parameter
UNION
SELECT NULL as folder_id,
document_id, modified_by, updated_at
FROM documents
WHERE folder_id = given_parameter
функция, которую я хочу реализовать, заключается в получении последнего значения update_at
для каждой подпапки внутри папки или файла внутри папки / подпапка, поэтому вместо того, чтобы показывать значение updated_at для папки, он будет искать самую последнюю update_at
и кто ее изменил.
Ожидаемый результат с parent_id=null
/ folder_id=null
folder_id|document_id|modiefied_by| updated_at |
---------+-----------+------------+---------------------+
1 | NULL | Andy | 2020-01-26 14:22:03 |
NULL | 1 | Andy | 2019-12-11 13:12:25 |