我有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)
]
所以我的数据库中有这样的东西:
我想要的是当我选择红色类别时返回所有结果,我想返回所有文档和子类别名称,在我的视图中,我使用选择表单以红色返回所选父类别的ID。 / p>
这是我的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;
}
}
}
我有点失落,我没有解决方案来递归地做,并返回每个类别,子类别,子子类别等的数据。
提前感谢您的帮助。
答案 0 :(得分:0)
我不确定语法,但想法是在每个级别调用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;
}