我在数据库中有一个包含文件夹/文件的表。每个文件夹可以包含多个文件和文件夹,其中可以包含更多文件夹等。我的表有3个重要属性。
现在我要做的是获取文件/文件夹的完整路径,当我有它的ID时。(顶级文件夹parentid为null)
问题是我能看到这样做的唯一方法就是这样做
while (continue) {
"select (parentid) from table where id = (id)"
if(parentid equals null) {
continue is false;
} else {
path += "/" + parentid(name);
}
}
抱歉可怜的psudo
但它会继续保存父文件夹,直到不再存在,然后我可以创建我的路径
但这似乎是一种非常低效的方式。特别是如果我必须处理数十万个文件,我必须为每个文件/文件夹执行此操作。
是否会有更简单有效的SQL查询。
答案 0 :(得分:1)
您可以在从数据库内部运行的函数或存储过程中执行此操作。这将减少对DB和正在传输的数据的调用量。大多数主要数据库都支持预备语句,因此您的数据库应该支持它。
答案 1 :(得分:1)
如何使用递归SQL并在1 DB调用中获得完整的树:
SELECT
id,
name,
@pv:=parentid as 'parentid'
FROM
table1
JOIN
(SELECT @pv:=1) tmp
WHERE id=@pv;
当然,您需要使用PreparedStatement来进一步提高效果。
答案 2 :(得分:0)
要遵循的一个咒语永远不会动态计算可以设置的。
在你的情况下,考虑做一些事情,比如在你的表中添加一个新字段(fullparentpath)。
然后您可以通过直接查询来获取完整路径。