有没有更有效的方法来循环这个SQL结果集?

时间:2013-02-21 02:57:53

标签: mysql sql

所以我在数据库中有一个表,其中包含如下结构的类别:

pk int:cat_id
int:parent_id
varchar:cat_name

顶级类别的null parent_id为空,可能有多个级别的子级。 基本上,我正在使用搜索字符串并将其与类别名称进行匹配,如果类别包含父类,那么我想以痕迹方式显示所有匹配的完整路径。这是我现在正在做的伪代码:

search_string = whatever;
result = query db and find all category names matching "%whatever%";
foreach(result)
{
    parent_id = result[parent_id];
    result_path = result[cat_name];
    while(parent_id != null)
    {
        result2 = query db and find cat_id = parent_id;
        result_path = result2[cat_name] + " > " + result[path];
        parent_id = result2[parent_id];
    }
    print result_path;
}

除了嵌套循环和数据库查询之外,还有更有效的方法吗?

感谢您的任何意见。

1 个答案:

答案 0 :(得分:0)

您拥有的是作为邻接列表存储的层次结构。在MySql或PHP中,递归是解决这个问题的唯一实用方法。

如果您正在认真考虑此特定查询的效率,请将层次结构存储为嵌套集。请注意,这是一项非常重要的练习,会增加维护数据的成本。它还会降低其他查询的效率,例如寻找孩子。

此网站上有大量信息,其他信息则关于在RDMS中存储分层数据。