私は保存されたファイルとフォルダの構造に関する情報を含むMySqlデータベースを持っています。PHP MySqlはすべての子IDをループします
「ID」、「名前」、「親のID」を含む「フォルダ」という表があります。
基本的には、すべての子フォルダと子フォルダの子フォルダをループして、子フォルダがなくなるまでIDを収集します。
現在、私はGetChilds($parentId)
と呼ばれる機能を含むPHPスクリプトを持っています。 機能は、ParentIDが$parentID
のすべてのフォルダIDを収集するSQLクエリを実行します。その後、見つかったIDで同じ機能を呼び出すループがforeach
ループです。
これは期待どおり動作しますが、非常に遅く、私が読んだことはPHPのループ内にクエリを置くことは推奨されません。
私が探しているのは、SQLスクリプトやPHPを使用してより効率的な方法で同じ機能を実行する別の方法です。
EDIT:
ここでは私のコードです:
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'フィールドを持つことで解決しました。例えば、フォルダtest内のファイルfoo.jpgはパス' test/foo.jpg'を持ちます。あなたの説明のようなクエリは再帰的ですが、パスがあれば簡単になります。 'test'フォルダのすべてのサブフォルダとファイル:' WHERE path LIKE 'test /%' ORDER BY path ASC' – jedifans