Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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-递归地从SQL数据库获取数据_Php_Mysql_Sql_Recursion - Fatal编程技术网

PHP-递归地从SQL数据库获取数据

PHP-递归地从SQL数据库获取数据,php,mysql,sql,recursion,Php,Mysql,Sql,Recursion,我有两个表tl_docs_类别,它们是tl_docs的父表。 表格结构如下: tl_docs_categories [ id, category_name, pid (give the posibility to create subcategories / pid = tl_docs_categories.id if have subcategory) ] tl_docs [ id, doc_name, doc_url, pid(id for cate

我有两个表tl_docs_类别,它们是tl_docs的父表。 表格结构如下:

tl_docs_categories
[
   id,
   category_name,
   pid (give the posibility to create subcategories / pid = tl_docs_categories.id if have subcategory)
]
tl_docs
[
   id,
   doc_name,
   doc_url,
   pid(id for category)
]
我的数据库中有这样的东西:

我想要的是当我选择红色的类别时返回所有结果,我想要返回所有文档和子类别名称,在我的视图中,我使用选择表单以红色返回所选父类别的id

以下是我的php函数:

public function checkSQL($id)
{
    if(!empty($id))
    {
        /* SQL CHECK IF HAVE DOCS */
        $sqlDoc = "SELECT category_name, doc_name, doc_url FROM tl_docs_categories dc
                   LEFT JOIN tl_docs d ON dc.id = d.pid WHERE d.pid = " . $id;
        $objDocs = Database::getInstance()->query($sqlDoc);
        if ($objDocs->numRows == 0)
        {
            /* SQL CHECK IF HAVE CHILD */
            $sqlChild = "SELECT dc.id, category_name, doc_name, doc_url FROM tl_docs_categories dc
                         LEFT JOIN tl_docs d ON dc.id = d.pid WHERE dc.pid =" . $id;
            $objDocs = Database::getInstance()->query($sqlChild);
                return $objDocs;
            }
        }
        else
        {
            return $objDocs;
        }
    }
}
我有点迷路了,我没有一个解决方案可以递归地执行,并返回每个类别、子类别、子类别以及更多的数据


提前感谢您的帮助。

我不确定语法,但想法是在每个级别调用
checkSQL
,如果您想返回所有结果,那么您必须将
$objDocs
变量调整为数组

public function checkSQL($id)
{
    if(!empty($id))
    {
        /* SQL CHECK IF HAVE DOCS */
        $sqlDoc = "SELECT category_name, doc_name, doc_url FROM tl_docs_categories dc
                   LEFT JOIN tl_docs d ON dc.id = d.pid WHERE d.pid = " . $id;
        $objDocs = Database::getInstance()->query($sqlDoc);

        if ($objDocs->numRows > 0) {
            foreach ($objDocs->fetchColumn() as $row) {
                $objDocs = $this->checkSQL($row->id);
            }
        }

        return $objDocs;
    }

    return null;
}

我不确定语法,但想法是在每个级别上调用
checkSQL
,如果要返回所有结果,那么必须将
$objDocs
变量调整为数组

public function checkSQL($id)
{
    if(!empty($id))
    {
        /* SQL CHECK IF HAVE DOCS */
        $sqlDoc = "SELECT category_name, doc_name, doc_url FROM tl_docs_categories dc
                   LEFT JOIN tl_docs d ON dc.id = d.pid WHERE d.pid = " . $id;
        $objDocs = Database::getInstance()->query($sqlDoc);

        if ($objDocs->numRows > 0) {
            foreach ($objDocs->fetchColumn() as $row) {
                $objDocs = $this->checkSQL($row->id);
            }
        }

        return $objDocs;
    }

    return null;
}

对不起,我不明白你在寻求什么帮助!您想要的结果是什么?我想在recursiv函数中转换我的函数,该函数将检查每个级别,并从我在视图中选择的图像上显示为红色的父类别返回所有文档、子类别名称。示例i选择最后一个红色类别:红色id=15;绿色id=16;绿色pid=15;蓝色id=17;蓝色pid=16;所以我想从我选择的类别中返回所有文档数据和类别名称,该类别显示为红色。对不起,我的英语太差了:教授,我不明白你在寻求什么帮助!您想要的结果是什么?我想在recursiv函数中转换我的函数,该函数将检查每个级别,并从我在视图中选择的图像上显示为红色的父类别返回所有文档、子类别名称。示例i选择最后一个红色类别:红色id=15;绿色id=16;绿色pid=15;蓝色id=17;蓝色pid=16;所以我想从我选择的类别中返回所有文档数据和类别名称,该类别显示为红色。对不起,我的英语是:s