在我的系統中,每個項目都有一些標籤。現在我想向用戶展示一個帶有標籤的樹。 樹應該有第一級的所有標籤。
在每個第一級標籤內,應再次出現在屬於第一級標籤的項目中找到的所有標籤。
在第三級中,應該出現屬於第一級和第二級的標籤,依此類推。
這個想法是,用戶可以基於他的標籤過濾項目,並且可以改進輸入到樹中的過濾而不必鍵入標籤。如何讓SQL根據具有相同標籤的項目創建標籤層次結構?
項目最初作爲項目表中的字符串字段存儲,但爲了輕鬆製作此解決方案,我已將它們移動到子表中。
使用這些物品作爲輸入:
|Item |Tags |
|-----------|--------|
|Computer |a,b,c |
|Mouse |a,c |
|Keyboard |c,d |
|Monitor |a,b |
應該輸出樹:
Tree Items that are show when selected
root Computer,Mouse,Keyboard,Monitor
+--a Computer,Mouse,Monitor
| +--b Computer,Monitor
| | +--c Computer
| +--c Computer,Mouse
| +--b Computer
+--b Computer,Monitor
| +--a Computer,Monitor
| | +--c Computer
| +--c Computer
| +--a Computer
+--c Computer,Mouse,Keyboard
| +--a Computer,Mouse
| | +--b Computer
| +--b Computer
| | +--a Computer
| +--d Keyboard
+--d Keyboard
+--c Keyboard
這SQL應該運行只在Oracle數據庫中,所以使用connect by
運營商是可以接受的。
我從Delicious的Firefox擴展中選擇了這種行爲,它以樹的形式顯示標籤,但限制它只有兩個級別,我需要它顯示儘可能多的級別。
你有什麼想法嗎?
在此先感謝。
順便說一句:在4個實體上有4個標籤,您的樹視圖中有19行。有了大量的標籤和/或實體,這將爆炸成不可能管理的數字。 – MatBailie
對。但是我不會有大量的標籤,最多50個標籤,只有當標籤被選中時我纔會加載這些標籤,所以我認爲這不是問題。但是,感謝評論。 –