ホームページ >データベース >mysql チュートリアル >たった 1 つのデータベース パスで PHP/MySQL の階層カテゴリ データを取得する方法
PHP/MySQL のカテゴリ階層
PHP/MySQL では、隣接リストモデル。この階層データを効果的に取得するには、データベース パスを 1 つだけ必要とするアプローチを採用できます。
ワンパス データ取得アルゴリズム
$refs 配列を作成してみましょう。 $list 配列。提供された回答で示されているものに似ています。
<code class="php">$refs = []; $list = []; $sql = "SELECT category_id, parent_id, name FROM categories ORDER BY name"; $result = $pdo->query($sql); foreach ($result as $row) { $ref = &$refs[$row['category_id']]; $ref['parent_id'] = $row['parent_id']; $ref['name'] = $row['name']; if ($row['parent_id'] == 0) { $list[$row['category_id']] = &$ref; } else { $refs[$row['parent_id']]['children'][$row['category_id']] = &$ref; } }</code>
このアルゴリズムは、階層データ構造を効率的に構築します。 $refs 配列にはすべてのカテゴリへの参照が保持され、$list 配列には最上位カテゴリ (親のないカテゴリ) への参照が含まれます。
再帰的リスト生成
階層構造を HTML リストとして出力するには、次のような再帰関数を利用できます。
<code class="php">function toUL(array $array) { $html = '<ul>'; foreach ($array as $value) { $html .= '<li>' . $value['name']; if (!empty($value['children'])) { $html .= toUL($value['children']); } $html .= '</li>'; } $html .= '</ul>'; return $html; }</code>
この関数は、データベースから取得した階層データを効率的に表す HTML リストを再帰的に構築します。
以上がたった 1 つのデータベース パスで PHP/MySQL の階層カテゴリ データを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。