查询自我关系类别表

时间:2010-09-29 23:09:19

标签: php phppgadmin

我正在尝试为下表优化我的PHP代码

Create table categories (
    cat_id Int UNSIGNED NOT NULL AUTO_INCREMENT,
    parent_id Int UNSIGNED,
    cat_name Varchar(50) NOT NULL,
 Primary Key (cat_id)) ENGINE = InnoDB;

要获取所有类别和子类别,我使用一个查询仅查询父类别,然后发出单个查询以获取子类别。

这是我列出所有主要类别的代码

$result = mysql_query("SELECT cat_id, cat_name FROM categories WHERE parent_id IS NULL");

列出我使用以下查询

的每个类别的各个子类别
$sub_result = mysql_query ("SELECT cat_id, cat_name FROM categories WHERE parent_id=$cat_id");

我有30个类别,所以上面每个页面发出30个查询,我试图最小化查询数量。任何提示?

由于

2 个答案:

答案 0 :(得分:1)

关于managing hierarchical data的文章可能会给你一些启发。不要因为它在MySQL网站上的事实而气馁,主要思想是相同的。

答案 1 :(得分:0)

由于缺乏对递归查询的支持,这在MySQL中很难实现。

有几种替代方法可以构建表,以便您可以在单个查询中查询层次结构的所有后代。但它们涉及改变存储数据的方式。

有关演示多种解决方案的示例,请参阅我的演示文稿Models for Hierarchical Data with SQL and PHP