簡體   English   中英

PHP - 遞歸地從SQL數據庫獲取數據

[英]PHP - Get data from SQL database recursively

我有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。

這是我的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;
        }
    }
}

我有點失落,我沒有解決方案來遞歸地執行它並返回每個類別,子類別,subsubcategory等的數據。

提前謝謝你的幫助。

我不確定語法,但想法是在每個級別調用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM