0

我現在用的是鄰接表模型找到我的網站中的子類別。我有PHP代碼來查找所有類別和子類別,但現在我無法弄清楚如何使用它來創建導航系統。下面是該網站將如何工作的,很基本的:?鄰接表型號+網址導航

URL字符串 將會有一個主類,其次是各級

的index.php類別=類別名& 1級=子類別&級別2 =其他子類別& 3級=內容項

後來,我將讓搜索引擎友好的鏈接。

URL沒有子類別 其中1級爲內容項

www.website.com/category/content-item/

URL與子類 其中等級1,2,3等是子類別和最後一級是內容項

www.website.com/category/sub-category/sub-category-2/content-item/

這裏是我使用的查找類別和子類別代碼。目前它只是輸出所有類別和子類別的列表,數字是每個孩子的級別。不知道這是否有幫助,它只是創建一個列表。

function display_children($ParentCategoryID, $Level) { 

     // retrieve all children of parent 

     if ($ParentCategoryID == ''){ 
      $Result = mysql_query('SELECT * FROM categories WHERE parent_category_id IS null'); 
     } 
     else{ 
      $Result = mysql_query('SELECT * FROM categories WHERE parent_category_id="'.$ParentCategoryID.'";'); 
     } 

     // display each child 
     while ($Row = mysql_fetch_array($Result)) { 

      echo str_repeat('-',$Level)."[".$Level."]".$Row['category_name']."<br />"; 

      display_children($Row['category_id'], $Level + 1); 

     } 

    } 
+0

這都是偉大的,但究竟是什麼問題? – bububaba

+0

@bububaba問題是,我如何鏈接到我的內容?在我的數據庫中說我有一個名爲'content'的表。在該表中是類別爲「3」的行。如果'3'是'2'和一個孩子'2'是'1'和孩子'1'是父,我怎麼會造成系統無法正常顯示的內容,相對於類別和子類別?因此,從主頁點擊'1'查看'2',然後點擊'2'查看'3',然後點擊'3'查看'content'。最終結果將是1 => 2 => 3 =>內容頁面。我不知道這是否有道理,希望它確實如此。謝謝。 –

+0

另外,'content'表只知道它最低的子類別的類別id。我有另一個名爲'categories'的表來告訴每個類別是否有父類。 –

回答

0

請先看這個問題options on how to represent hierarchical data in a database

鄰接列表的好處在於它的簡單性,並且使得更改變得簡單,但可能會很糟糕,因爲它會導致遞歸代碼,比如上面的函數,在實踐中這是一個負載下的性能殺手。最好的辦法,不存在改變你的數據模型是using MySQL session variables to retrieve the entire hierarchy in one query,它帶回你在一個數據庫中調用所需的數據。儘管如此,在負載下導致性能較差 - 不如遞歸函數 - 但仍然不好;而且,我從經驗寫作:)。

如果是我我會結合使用或者嵌套集合,鄰接表有一些反向標準化,如表橋和平面表格,或者只是一個宗族表。真的取決於數據更改的頻率以及是否需要輕鬆完成這些更改。所有這些選項都應該快得多,而不是隻依賴父 - 子ID列。