Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有效实施;类别“;树?(MySQL)_Php_Mysql_Categories_Categorization - Fatal编程技术网

Php 有效实施;类别“;树?(MySQL)

Php 有效实施;类别“;树?(MySQL),php,mysql,categories,categorization,Php,Mysql,Categories,Categorization,如果我有一个类别树,其中有一个未确定级别的子类别,是否有可能在一个查询中获得整个类别树(没有任何循环) 这是一种可能的情况: category_id parent_id Name 0 null Home 1 null Auto 2 0 Living Room 3 2 Couches 4 2 TV 5

如果我有一个类别树,其中有一个未确定级别的子类别,是否有可能在一个查询中获得整个类别树(没有任何循环)

这是一种可能的情况:

 category_id  parent_id   Name
0           null        Home
1           null        Auto
2           0           Living Room
3           2           Couches
4           2           TV
5           4           Home Theatre
6           5           Cables
如果您注意到,电缆沿袭是这样的: 家庭>客厅>电视>家庭影院>电缆


现在,我得到当前类别的父类别并继续循环,直到找到父类别为空的父类别。我知道这部分以前有人问过。然而,我想知道有没有更好的方法来构造这个表,这样我就不必运行X个数量的查询(或子查询)?例如,我考虑添加一个名为parents的第四列,或者在一个逗号分隔的列表中包含整个沿袭(在这种情况下,parents将是:
5,4,2,0
。然而,这似乎很俗气,效率低下(并且容易被打破).是否有更好的机制可用?

是的,有比简单树更好的结构来对数据库中的分层数据进行建模。请看一看,例如或。闭包表与您最后想到的类似。我支持闭包表的建议。提供了各种方法的详细说明,包括闭包表,解决这个问题。当我做类似的事情时,我发现这个非常有用:Tyvm。从来没有听说过“闭包表”之前。现在阅读文章。是的,有比简单树更好的结构来建模数据库中的分层数据。请看一看例如或。闭包表与您在最后想到的类似。我支持闭包表的建议。提供了各种解决方法的良好描述,包括闭包表这个问题。当我在做类似的事情时,我发现它非常有用:Tyvm。以前从未听说过“闭包表”。现在阅读文章。