2017-02-16 66 views
0

我試圖從$形式 - 創建多級分類>多選()。
下面是我的表結構。多級分類與單個表

| id | parent | name | 
|----|--------|---------| 
| 10 |  0 | 'menu1' | 
| 12 |  10 | 'menu2' | 
| 13 |  10 | 'menu3' | 
| 14 |  0 | 'menu4' | 

結果是

+----+---------+ 
| id | name | 
+----+---------+ 
| 10 | 'menu1' | 
| 12 | 'menu2' | 
| 13 | 'menu3' | 
| 14 | 'menu4' | 
+----+---------+ 


的ID顯示出對在選取元件顯示值和名稱。

<select> 
    <option value='10'>menu1</option> 
    <option value='12'>menu2</option> 
    <option value='13'>menu3</option> 
    <option value='14'>menu4</option> 
</select> 


沒有表現出層次。我想下面顯示。

<select> 
     <option value='10'>menu1</option> 
     <option value='12'>menu1 -> menu2</option> 
     <option value='13'>menu1 -> menu3</option> 
     <option value='14'>menu4</option> 
    </select> 

我應該怎麼辦?
我想操縱$ form_multiselect()的結構。

+0

您將不得不爲此創建自己的自定義助手。 –

+0

是的,如果可能的話。 –

+0

數據庫中的表是什麼? –

回答

1

我假設你在上面所列的表是由你...如果這是你如何得到它嘗試(你沒有發佈,所以你的表名」得到了它的格式的數據庫將不得不這樣做你自己):

$result = $this->db->select('CASE WHEN b.name IS NOT NULL THEN CONCAT(a.name, ,\' -> \' b.name) ELSE a.name END AS option') 
    ->from('yourtable a') 
    ->join('yourtable b', 'a.parent = b.id', 'left') 
    ->get()->result(); 

如果您的問題有誤導我,我很抱歉......沒有頭緒......

+0

我使用activerecord來獲取數據 –

+1

這不應該在數據庫層完成。如果葉子也會有另一片葉子。你能想象有多大的這個查詢與10級鄰接關係?在大多數情況下,獲得所有行,然後生成'foreach'並將它們分組爲數組,看起來像'$ menu = ['parent'=>'menu1','child'=> ['menu2','menu3', '等。']]'。這是最簡單的方法,另一種方法是在同一時間使用樹更聰明,但更困難的方式。請看看這個博客文章http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ – VaL

+1

在MySQL中,當然。我一直使用的SQL Server,只是用遞歸cte來構建它。無論如何...我提供了一個解決方案,隨時提供您自己的 –