我正在开发一个媒体库,让用户可以将文件整理到文件夹中。我有一个文件表来跟踪它所属的文件夹的父ID。我还有一个文件夹表,也允许父ID - 所以一个文件夹可以在另一个文件夹中。当我想显示一个列出父文件夹包含的文件和文件夹的视图时,问题就出现了。直到这一点,我已经采取了廉价的方式,只是对文件夹,然后文件 - 然后只是一个接一个地列出一个单独的查询。但是,现在列表已经很长了 - 我想对它们进行分页 - 所以我需要限制我的查询。如何组合2个查询以获取我可以循环的文件和文件夹的一个数据数组?
例如,我可以这样做:
SELECT *
FROM `files` LEFT JOIN `folders` ON `files`.`folder_id` = `folders`.`id`
WHERE `folders`.`id` = 198
这将为我提供该文件夹中所有文件的列表。
然后这个:
SELECT * FROM `folders` WHERE `parent` = 198
这将为我提供所有子文件夹的列表。
有没有办法可以将两者结合起来给我一个数据数组来循环?
答案 0 :(得分:1)
尝试这样的事情:
SELECT id_file, name, 'file' as `type`
FROM `files`
LEFT JOIN `folders` ON `files`.`folder_id` = `folders`.`id`
WHERE `folders`.`id` = 198
UNION
SELECT id_folder, name, 'folder' FROM `folders` WHERE `parent` = 198
LIMIT 0, 20