3


0

これは(うまくいけば)答えるためにあなたの何人かのためのかなり簡単な質問であるべきです。

私は私のSQLデータベースから作業再帰メニューを持っている、今私の主な問題は:

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

 https://stackoverflow.com/questions/477793/php-mysql-building-a-nav-menu-hierarchy[PHP/MySQL]私は、この質問について「クレタス」がいくつかコメントを述べたことについて、ほぼ順調に進んでいます。
-  ナビゲーションメニュー階層の構築]

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

3 Answer


4


さて、あなたが階層が欲しいならば、私が知っている最も良い方法は非常に詳細に記述されている「修正されたプレオーダツリートラバーサル」と呼ばれています このサイトポイントで記事]、途中で開始します。

Gussが提案したものとの主な違いは、探しているツリーの一部だけを取得する方が少しパフォーマンスがよく、はるかに簡単だということです。


2


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

ツリーが十分に頻繁に修正されることを期待しているなら、ウェブインターフェースを通して - と言うことができます、そしてそれはあなたがメニューを読むたびにパスを生成することがより簡単である、これのように:

id |名前|親---- -------- ------- 0 |卵NULL 1 |牛乳0 2 |ベーコン1 3 |トマト0 4 |レタス1

foreach(クエリ( "SELECT * FROMメニューORDER BY親ASC")を$ rowとして){$ menuitem = array_merge(array()、$ row);} $ menuLookup [$ menuitem ['id']] $ menuitem ['name']; $ menu [] "/"。 $ menuitem ['name']; $ parent ['menu'] []

私はこのコードをデバッグしていません。正当性を確かめるためだけにテストしました;-)


0


私はgroovyで何かを書いた:http://blog.srvme.de/2009/11/29/reading-a-reflexive-association-in-a-recursive-way-for-grails-and-groovy/