1

私は多層メニューを構築しています。したがって、たとえば、各メイン メニュー項目には 5 ~ 10 個のサブメニュー項目があり、それぞれに 5 ~ 10 個の第 3 レベル項目がある場合があります。メニュー項目は、どの層からのものであっても、1 つのテーブルに保持されます。私が(現在)データを引き出すために使用しているクエリは次のようになります。

SELECT *
FROM menu_items AS m1
LEFT JOIN (SELECT name AS slName, id AS slId, parent_id AS slPid FROM menu_items)
m2 ON m1.id = m2.slPid
LEFT JOIN (SELECT name AS tlName, id AS tlId, parent_id AS tlPid FROM menu_items)
m3 ON m2.slId = m3.tlPid
WHERE parent_id = 0

このクエリの結果は視覚的に私が望むメニューのように見えますが、DataTable などとしてそのままにしておくのではなく、オブジェクトにきれいに貼り付けることができるように再構築したいと考えています。

上記のクエリの結果の例を次に示します。

参考までに、sl は第 2 レベル、tl は第 3 レベルなどを意味します。

{id=1, name=Industry, level=1, parent_id=0, slname=Equipment & Machinery, slid=4, slpid=1, tlname=null, tlid=null, tlpid=null}
{id=1, name=Industry, level=1, parent_id=0, slname=Food, slid=5, slpid=1, tlname=null, tlid=null, tlpid=null}
{id=1, name=Industry, level=1, parent_id=0, slname=Fabricated Metal Products, slid=8, slpid=1, tlname=null, tlid=null, tlpid=null}
{id=1, name=Industry, level=1, parent_id=0, slname=Automotive, slid=9, slpid=1, tlname=null, tlid=null, tlpid=null}
{id=1, name=Industry, level=1, parent_id=0, slname=Chemicals and Allied Products, slid=10, slpid=1, tlname=null, tlid=null, tlpid=null}
{id=2, name=Application, level=1, parent_id=0, slname=App Stuff 1, slid=11, slpid=2, tlname=null, tlid=null, tlpid=null}
{id=2, name=Application, level=1, parent_id=0, slname=App Stuff 2, slid=12, slpid=2, tlname=null, tlid=null, tlpid=null}
{id=2, name=Application, level=1, parent_id=0, slname=App Stuff 3, slid=13, slpid=2, tlname=null, tlid=null, tlpid=null}
{id=2, name=Application, level=1, parent_id=0, slname=App Stuff 4, slid=14, slpid=2, tlname=null, tlid=null, tlpid=null}
{id=3, name=Product, level=1, parent_id=0, slname=Prod Stuff 1, slid=15, slpid=3, tlname=null, tlid=null, tlpid=null}
{id=3, name=Product, level=1, parent_id=0, slname=Prod Stuff 2, slid=16, slpid=3, tlname=null, tlid=null, tlpid=null}
{id=3, name=Product, level=1, parent_id=0, slname=Prod Stuff 3, slid=17, slpid=3, tlname=null, tlid=null, tlpid=null}

したがって、問題は、Menu オブジェクトを作成するために非常に適切にフォーマットされていない一連の行になってしまうことです。再構築方法に関する推奨事項を探しているだけです。おそらくSQLクエリを変更して、より良い基本データセットを取得するか、現在のSQLをフォーマットする方法について考えてください。

4

1 に答える 1

1

次のようなことができます:

ID   NAME            PARENT 
 1   Industry        1(or null. either self referencing or null = top level)
 2   Food            1
 3   Burgers         2
 4   Application     4
 5   Software        4
 6   Product         6

データベース内。基本的に、Name はループ バックし、親列が null になるか、その行の ID を参照するまでチェーンをたどるように、コードで設定できます。

したがって、このメニューは次のようになります。

Industry
  Food
    Burgers
Application
  Software
Product
于 2012-10-22T20:22:54.167 に答える