Php 改进CSV产品导入->按名称查询数组类别

Php 改进CSV产品导入->按名称查询数组类别,php,mysql,arrays,csv,query-performance,Php,Mysql,Arrays,Csv,Query Performance,最近我们做了一个很大的改变,比如为我们的网站建立一个新的分类树,并在正确的分类中移动了200多万个产品 我们没有性能问题,一切都很顺利 我唯一的问题是,现在的分类树更加复杂和深入,当通过CSV导入超时脚本添加新文章时,它会受到影响,非常缓慢,脚本崩溃 基本上,通过CSV添加新产品时,类别字段始终以文本形式分隔,例如EngineCrankshaftAudiAudi A5 如果数据库中存在或不存在,那么获取categoryID的函数中的问题在哪里呢。我怎样才能提高?我认为主要问题在于创建的非常大的阵

最近我们做了一个很大的改变,比如为我们的网站建立一个新的分类树,并在正确的分类中移动了200多万个产品

我们没有性能问题,一切都很顺利

我唯一的问题是,现在的分类树更加复杂和深入,当通过CSV导入超时脚本添加新文章时,它会受到影响,非常缓慢,脚本崩溃 基本上,通过CSV添加新产品时,类别字段始终以文本形式分隔,例如EngineCrankshaftAudiAudi A5

如果数据库中存在或不存在,那么获取categoryID的函数中的问题在哪里呢。我怎样才能提高?我认为主要问题在于创建的非常大的阵列


category字段总是以文本形式由示例分隔:EngineCrankshaftAudiAudi A5导入到Tentiable,每行解析一个类别,然后保存。请向我们展示生成的SQL示例。
protected function _getCategoriesID($field_value)
        {
            global $Database;
            $products_categories = array();
            $separator           = $this->_getSeparator($field_value);
            $category_array      = array();
            if ($separator != '') {
                $category_array = explode($separator, $field_value);
                $category_array = array_reverse($category_array);
            } else {
                $category_array[0] = $field_value;
            }
            unset($separator);
            $Qcategory = $Database->query('select c0.categories_id from :table_categories as c0 inner join :table_categories_description as cd on c0.categories_id=cd.categories_id where cd.categories_name = :categories_name and cd.language_id=:language_id');
            $Qcategory->bindTable(':table_categories', TABLE_CATEGORIES);
            $Qcategory->bindTable(':table_categories_description', TABLE_CATEGORIES_DESCRIPTION);
            $Qcategory->bindValue(':categories_name', $category_array[0]);
            $Qcategory->bindInt(':language_id', $this->language);
            $count = 1;
            if (count($category_array) > 1) {
                while ($count < count($category_array)) {
                    $Qcategory->appendQuery(' and c' . ($count - 1) . '.parent_id in (select c' . $count . '.categories_id from :table_categories' . $count . ' as c' . $count . ' inner join :table_categories_description' . $count . ' as cd' . $count . ' on c' . $count . '.categories_id=cd' . $count . '.categories_id where cd' . $count . '.categories_name = :categories_name' . $count . ' and cd' . $count . '.language_id=:language_id' . $count . ' ');
                    $Qcategory->bindTable(':table_categories' . $count, TABLE_CATEGORIES);
                    $Qcategory->bindTable(':table_categories_description' . $count, TABLE_CATEGORIES_DESCRIPTION);
                    $Qcategory->bindValue(':categories_name' . $count, $category_array[$count]);
                    $Qcategory->bindInt(':language_id' . $count, $this->language);
                    $count++;
                }
                for ($i = 0; $i < $count - 1; $i++) {
                    $Qcategory->appendQuery(')');
                }
            }
            $Qcategory->execute();
            while ($Qcategory->next()) {
                $products_categories[] = $Qcategory->value('categories_id');
            }
            unset($Qcategories);
            return $products_categories;
        }