2012-07-08 58 views
1

我有一個鄰接型號列表中,這是查詢:如何在HTML + PHP渲染樹(笨)

SELECT t1.FIO AS lev1, t2.FIO AS lev2, t3.FIO AS lev3, t4.FIO AS lev4, t5.FIO AS lev5, t6.FIO AS lev6, t7.FIO AS lev7, t8.FIO AS lev8, t9.FIO AS lev9, t10.FIO AS lev10, t11.FIO AS lev11, t12.FIO AS lev12, t13.FIO AS lev13, t14.FIO AS lev14, t15.FIO AS lev15, t16.FIO AS lev16, t17.FIO AS lev17, t18.FIO AS lev18, t19.FIO AS lev19, t20.FIO AS lev20, t21.FIO AS lev21, t22.FIO AS lev22, t23.FIO AS lev23, t24.FIO AS lev24 FROM users AS t1 LEFT JOIN users AS t2 ON t2.parent_id = t1.id LEFT JOIN users AS t3 ON t3.parent_id = t2.id LEFT JOIN users AS t4 ON t4.parent_id = t3.id LEFT JOIN users AS t5 ON t5.parent_id = t4.id LEFT JOIN users AS t6 ON t6.parent_id = t5.id LEFT JOIN users AS t7 ON t7.parent_id = t6.id LEFT JOIN users AS t8 ON t8.parent_id = t7.id LEFT JOIN users AS t9 ON t9.parent_id = t8.id LEFT JOIN users AS t10 ON t10.parent_id = t9.id LEFT JOIN users AS t11 ON t11.parent_id = t10.id LEFT JOIN users AS t12 ON t12.parent_id = t11.id LEFT JOIN users AS t13 ON t13.parent_id = t12.id LEFT JOIN users AS t14 ON t14.parent_id = t13.id LEFT JOIN users AS t15 ON t15.parent_id = t14.id LEFT JOIN users AS t16 ON t16.parent_id = t15.id LEFT JOIN users AS t17 ON t17.parent_id = t16.id LEFT JOIN users AS t18 ON t18.parent_id = t17.id LEFT JOIN users AS t19 ON t19.parent_id = t18.id LEFT JOIN users AS t20 ON t20.parent_id = t19.id LEFT JOIN users AS t21 ON t21.parent_id = t20.id LEFT JOIN users AS t22 ON t22.parent_id = t21.id LEFT JOIN users AS t23 ON t23.parent_id = t22.id LEFT JOIN users AS t24 ON t24.parent_id = t23.id LEFT JOIN users AS t25 ON t25.parent_id = t24.id WHERE t1.id = 16 

這是一個查詢中使用相鄰型號列表

做出深度的24級

之後,我做出這樣的:

<? for($i = 0; $i < $query->num_rows(); $i++): ?> 
<? $row = $query->row($i); ?> 
    <? for($n = 1; $n < 25; $n++): ?> 
    <? $lev = "lev$n"; ?> 
    <?= $row->$lev; ?> 
    <? endfor; ?> 
<? endfor; ?> 

它使每一行的只是領域,我真的不知道熱使其hieararchical,我使用笨,什麼是更好的在這裏使用的行或對象?

我需要做這樣的事情:

root_parent { 
    parent_1 { 
     child_1.name 
     child_2.name 
     child_3.name 
    } 

    parent_2 { 
     child_1.name 
     child_2.name 
     child_3.name 
    } 

    parent_3 { 
     child_1.name 
     child_2.name 
     child_3.name 
    } 
} 

沒有repeatings這可能嗎?

+0

neved做了這樣的事情,如果有人可以給我一個鏈接來閱讀的東西還是好一點的例子,我會心存感激 – 2012-07-08 17:59:11

+0

使用Ajax加載樹不加載完整的樹。使用類似http://mbraak.github.com/jqTree/ – Hardik 2012-07-08 18:27:38

回答

2

似乎有點複雜和不靈活的你在這裏做什麼吉爾斯。創建數據庫表是不是更好?每行都有自己的category_id和parent_id?即給頂級父母parent_id爲0,孩子們取其父母的category_id的parent_id。這將給你無限的深度,並且在渲染樹時更容易編碼。例如:

SQL的層次結構的第一級 -

SELECT * FROM (your_table) WHERE parent_id=0

SQL您hierarcy的第二級 -

SELECT * FROM (your_table) WHERE parent_id=(category_id of first level)

SQL您hierarcy的第三個層次 -

SELECT * FROM (your_table) WHERE parent_id=(category_id of second level)

等等...

+0

但如果SELECT返回多行和mysql的每個查詢給我一個錯誤是什麼? – 2012-07-09 20:13:04

+0

http://stackoverflow.com/questions/4452472/category-hierarchy-php-mysql只是試圖用笨這個實現,它的工作原理治療。爲toUL函數構建一個助手,並更改數組操作以使用查詢返回的行。這樣做的好處是您只需要一個查詢來選擇類別表中的所有行。 – 2012-07-13 17:05:57

+0

把我在博客文章中所做的事情放在:http://stevenbuick.com – 2012-08-04 19:40:26