2015-04-21 33 views
0

我試圖將一些網站鏈接保存到數據庫表中,然後將它們打印到使用PHP進行屏幕顯示。如何構建MySQL數據庫以在父目錄類型結構下的PHP中顯示鏈接記錄?

我需要幫助的部分是一些鏈接記錄將作爲parent記錄,然後child記錄將在它的父項下。

目標是生成類似下面的圖像,但從PHP數據庫中拉出鏈接記錄。

我不知道如何最好地爲此構建數據庫。作爲開始,我添加了一個名爲parent的列,其中我計算出每個鏈接記錄可以具有Parent記錄的ID

父記錄將充當文件夾/目錄。

enter image description here

我DATABSE結構,現在的......在此基礎上

id 
title 
description 
url 
permission 
notes 
active 
sort_order 
parent (will have the ID number of the parent folder/link of this link) 

,我怎麼能拉用PHP的記錄,並確保該鏈接留在父鏈接記錄像在圖像?

我的數據庫是否需要更改才能執行此操作?

+0

這類似於員工管理問題,試想要列出下他一個經理和員工喜歡你的形象 – niceman

+0

桌子和桌子本身的連接可能? – niceman

+0

我到目前爲止的想法...循環記錄,父記錄可以擁有它;自己的ID設置爲它的父值。 'if($ id === $ parent)'那麼它就是一個父記錄,那麼可能會分配匹配的記錄,其父值與剛剛設置的新父記錄相同,將它們保存到數組或其他東西。 。我想我需要讓自己的手變髒並嘗試一些測試 – JasonDavis

回答

1

其實,你的數據庫是完美的,您只需要研究如何在PHP中檢索這些信息。

我可以給你一個小提示,你將不得不使用遞歸函數,像這樣的:

function arrayLinks($parent) { 
    // Your SQL query for retrieving all links with $parent 
    $query = query("SELECT * FROM link WHERE parent = ".$parent); 

    // For each row, just return another arrayLinks function 
    $arrayLinks = array(); 
    foreach($query as $row) { 
    $arrayLinks[] = array(
     'row' => $row, 
     'child' => arrayLinks($row['id']) 
    ); 
    } 
    return $arrayLinks; 
} 

$arrayLinks = arrayLinks(0); 

這會給你這樣的一個數組:

[{ 
    row: { 
    id: 1, 
    title: 'Link 1' 
    }, 
    child: [{ 
    row: { 
    id: 3, 
    title: 'Link 1-1' 
    }, 
    child: [] 
    }, { 
    row: { 
    id: 4, 
    title: 'Link 1-2' 
    } 
    }] 
}, { 
    row: { 
    id: 2, 
    title: 'Link 2' 
    }, 
    child: [] 
}] 

在本例中,您有這些鏈接:

  • 鏈接1
    • 鏈接1-1
    • 鏈接1-2
  • 鏈接2
+0

非常感謝!我知道這是基本的101東西,我從來沒有真的必須這樣做! – JasonDavis

1

假設父母有一個較小ID比任何其子和父列的默認值是零,你可以命令他們這樣說:

(select ...., concat(concat(id,'_'),id) as parent_id from website_links where parent IS NULL 
union 
select ...., concat(concat(parent,'_'),id) as parent_id from website_links where parent IS NOT NULL) 
order by parent_id;