Php 从表中获取父类别和子类别

Php 从表中获取父类别和子类别,php,mysql,opencart2.x,Php,Mysql,Opencart2.x,我在这件事上惹麻烦了 目前正在为我的opencart网站中的产品和类别创建slug脚本。我有一个最大4级深的结构之前,产品本身 每个产品都存储一个包含类别的数组。客户插入产品的方式我并不总是有相同的情况。有时它只是最深的(4级)类别,有时它是从4级结构到顶部的所有类别。这是因为我使用opencart来显示父类别中的所有产品 因此,我正在编写一个脚本,该脚本在一个给定的类别id上收集所有类别名称。它必须寻找可能的父类和可能的子类 这并没有让我得到满意的结果。但我看到我几乎达到了想要的程度。虽然我的

我在这件事上惹麻烦了

目前正在为我的opencart网站中的产品和类别创建slug脚本。我有一个最大4级深的结构之前,产品本身

每个产品都存储一个包含类别的数组。客户插入产品的方式我并不总是有相同的情况。有时它只是最深的(4级)类别,有时它是从4级结构到顶部的所有类别。这是因为我使用opencart来显示父类别中的所有产品

因此,我正在编写一个脚本,该脚本在一个给定的类别id上收集所有类别名称。它必须寻找可能的父类和可能的子类

这并没有让我得到满意的结果。但我看到我几乎达到了想要的程度。虽然我的代码乱七八糟,这是我从未见过的

所以。。categories表保存类别id及其父id。如果没有父id,则父id=0 类别名称存储在另一个包含id和名称的表中

每个产品行都有一组类别id,我从中得到一个

我肯定我做错了,因为它们必须是一种检查所有子类别和父类别的方法,并通过一些嵌套循环获取它们的名称,这些嵌套循环只是我这里代码的一小部分

$products = $db->query("SELECT * FROM ".DB_PREFIX."product");
                          $products = $products->rows;
                          foreach ($products as $product) {
                                $url = $db->query("SELECT * FROM ".DB_PREFIX."url_alias WHERE query='product_id=".$product['product_id']."' LIMIT 1");
                                $url = $url->rows;
                                $url = $url[0];
                                $info = $db->query("SELECT * FROM ".DB_PREFIX."product_description WHERE product_id='".$product['product_id']."' LIMIT 1");
                                $info = $info->rows;
                                $info = $info[0];


                                $categories = $db->query("SELECT `bnc_category_description`.`name` , bnc_category_description.category_id FROM  `bnc_product_to_category` JOIN  `bnc_category_description` ON  `bnc_product_to_category`.`category_id` =  `bnc_category_description`.`category_id` WHERE  `bnc_product_to_category`.`product_id` ='".$product['product_id']."' LIMIT 1");
                                $categories = $categories->rows;
                                $categories = $categories[0];

                                //$i = 1;

                                $parent = $db->query("SELECT category_id, parent_id FROM bnc_category WHERE category_id ='" . $categories['category_id'] . "'");
                                $parent = $parent->rows;
                                $parent = $parent[0];


                                $link = $parent['category_id'] . "_";

                                $n = $parent['category_id'];

                                $pr = $parent['parent_id'];

                                $y = $db->query("SELECT category_id, parent_id FROM bnc_category WHERE parent_id ='" . $parent['category_id'] . "'");
                                $y = $y->rows;
                                $y = $y[0];

                                $x = $db->query("SELECT name FROM bnc_category_description WHERE category_id = '" . $y['category_id'] . "'");
                                $x = $x->rows;
                                $x = $x[0];

                                $final = $x['name'] . "_";

                                while($pr != 0){

                                    $s = $db->query("SELECT category_id, parent_id FROM bnc_category WHERE category_id ='" . $pr . "'");
                                    $s = $s->rows;
                                    $s = $s[0];
                                    $pr = $s['parent_id'];

                                    $n = $s['category_id'];

                                    $link .= $n . "_";
                                }

                                $name = $db->query("SELECT name FROM bnc_category_description WHERE category_id = '" . $test['category_id'] . "'");
                                $name = $name->rows;
                                $name = $name[0];

                                $test = $db->query("SELECT category_id FROM bnc_category WHERE parent_id='" . $n . "'");
                                $test = $test->rows;
                                $test = $test[0];

                               $final .= $categories['name'] . "_" . $name['name'];

更喜欢加入表格并获得结果。看看这个:更喜欢连接表并获得结果。看看这个: