我正在構建一個多層菜單。因此,例如,每個主菜單項可能有5-10個子菜單項,每個菜單項可能有5-10個第三級項目。菜單項不管來自哪一層,都保存在一張表中。我(目前)使用拉出來的數據查詢看起來是這樣的:需要如何組織SQL結果的建議
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表示第二水平,TL是指第三級等
{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。
完美的使用情況下的NOSQL後端,是不是? – smk
@SajitKunnumkal大概如此。我使用EBeans處理大部分其他事情 - 我只是不認爲EBean會在同一張表上支持這些奇怪的嵌套連接。有一個好的後端庫可以使用的建議嗎? –
我會做一個遞歸存儲過程並返回一個xml或json。取決於RDBMS可能很容易或很痛苦: -/ – DavidEG