質問

これは(できれば)答えるのが非常に簡単な質問であるべきです。

mySQLデータベースの再帰メニューが機能していますが、現在の主な問題は次のとおりです。

URLを作成する最良の方法は何ですか? / eggs / milk / bacon /のような各行のタイトルを持ち込みたいです。卵はレベル0で、卵-0、牛乳-1、ベーコン-2などです。これを動的に出力する方法についてのアイデアはありますか?

「クレトス」のようなものを探しています。この質問についていくつかコメントを述べました。 PHP / MySQL-ナビゲーションメニュー階層の構築

しかし、その方法についてもう少し説明が必要です。

役に立ちましたか?

解決

メニューツリーを頻繁に変更する場合を除き、各メニュー項目に必要な階層URLを事前に保存するのがおそらく最も簡単です(実行時の解決のため)。

ツリーが十分に頻繁に変更されることが予想される場合、たとえば、Webインターフェースを使用して、メニューを読むたびにパスを生成する方が簡単です。次のようになります。

 id | name   | parent
----+--------+-------
 0  | eggs   | NULL
 1  | milk   | 0
 2  | bacon  | 1
 3  | tomato | 0
 4  | lettuce| 1

foreach (query("SELECT * FROM menu ORDER BY parent ASC") as $row) {
  $menuitem = array_merge(array(), $row);
  $menuLookup[$menuitem['id']] &= $menuitem;
  if ($menuitem['parent'] == null) {
    $menuitem['path'] = "/" . $menuitem['name'];
    $menu[] &= $menuitem[];
  } else {
    $parent &= $menuLookup[$menuitem['parent']];
    $menuitem['path'] = $parent['path'] . "/" . $menuitem['name'];
    $parent['menu'][] &= $menuitem;
  }
}

このコードはデバッグしていませんが、正確性についてのみテストしました;-)

他のヒント

まあ、階層が必要な場合は、「Modified Preorder Tree Traversal」と呼ばれる最良の方法を知ってください。これはこのSitepointの記事で詳細に説明されており、中途半端に始まります。 。

Gussが提案したものとの主な違いは、パフォーマンスが少し向上し、探しているツリーの一部のみをフェッチする方がはるかに簡単なことです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top