我有MySql數據庫,其中包含有關保存的文件和文件夾結構的信息。PHP MySql循環遍歷所有子代碼
有一個名爲「Folder」的表,其中包含「ID」,「Name」和「ParentID」。
基本上我需要做的是循環所有的子文件夾和子文件夾的子文件夾,並收集他們的ID,直到沒有更多的子文件夾離開。
目前我有PHP腳本,其中包含函數GetChilds($parentId)
。 函數運行SQL查詢,收集所有文件夾ID的ParentID爲$parentID
。之後,有foreach
循環再次使用找到的ID調用相同的函數。
這個按預期工作,但其速度非常慢,而且我讀過的內容不推薦在PHP中的循環內部進行查詢。
所以我正在尋找的是另一種方式來使用SQL腳本或PHP更有效地執行相同的功能。
編輯:
這裏是我的代碼:
private function FetchData($query, $query_params, $dbConnection)
{
try
{
$stmt = $dbConnection->prepare($query);
if(count($query_params) > 0)
$stmt->execute($query_params);
else
$stmt->execute();
return $stmt->fetchAll();
}
catch(PDOException $e)
{
//Handle error
}
}
private function GetChilds($parentId, $connection)
{
$childFolders = $this->FetchData("select idFolder from Folder where ParentId = :parentId", array(":parentId" => $parentId), $connection);
//Save ID's
foreach($childFolders as $child)
{
$this->GetChilds($child['idFolder'], $connection);
}
}
請向我們展示您的代碼! – cmorrissey
我並不是說這篇文章應該是downvoted,但不是一舔代碼已經顯示,這篇文章是upvoted。什麼? –
在過去,我通過在每個條目中存儲'path'字段來解決類似的問題,例如文件夾測試中的文件foo.jpg將具有'test/foo.jpg'路徑。類似你的描述的查詢是遞歸的,但有一條路徑變得微不足道。對於文件夾'test'的所有子文件夾和文件:'WHERE path LIKE'test /%'ORDER BY path ASC' – jedifans