我在MySQL中有2个表格的文件夹结构:
文件夹表格:
|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|
documents表格:
|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
,则表示该文件夹位于目录的根目录中。至于文档,它可以在另一个文件夹中或在根目录中(folder_id
为空)。我正在使用此查询合并文件夹和文档:
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值,不如寻找最新的[ C0],以及谁对其进行了修改
update_at
SELECT document_id, f.folder_id,
(CASE WHEN f.updated_at > d.updated_at THEN f.modified_by ELSE d.modified_by END) AS modified_by,
(CASE WHEN f.updated_at > d.updated_at THEN f.updated_at ELSE d.updated_at END) AS updated_at,
(CASE WHEN f.updated_at > d.updated_at THEN 'folder' ELSE 'document' END) AS because
FROM `documents` AS d LEFT JOIN folders AS f ON f.folder_id=d.folder_id ORDER BY d.updated_at DESC, f.updated_at DESC
这将返回原因...