gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:13:26 25 4
gpt4 key购买 nike

我有 2 个表 tl_docs_categories,它们是 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)
]

所以我的数据库中有这样的东西:

enter image description here

我想要的是在选择红色类别时返回所有结果,我想返回所有文档和子类别名称,在我看来,我使用选择表单以红色返回所选父类别的 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 var 是一个数组。

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;
}

关于PHP - 递归地从SQL数据库中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39267590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com