2017-01-29 113 views
1

從我的數據庫拉內容並通過foreach循環運行。我拉的每一個項目都有一個帶有ID的列和一個帶有PARRENT ID的列(以及其他列)。 首先,我拉我的PARRENT ID列等於0的所有行,並通過我的foreach循環輸出它們,但對於我得到的每個結果,我想運行一個新的查詢來檢查PARRENT ID等於其ID的行。對於我得到的每一個結果,我都會一次又一次地做同樣的事情,因爲它可能會發現許多結果(可能這會永遠持續下去)。PHP:我如何在每個foreach結果上運行foreach循環?

讓我試着想象這樣

ID = 1, PARRENT ID = 0 
 
ID = 2, PARRENT ID = 0 
 
ID = 3, PARRENT ID = 0 
 
    ID = 4, PARRENT ID = 3 
 
    ID = 5, PARRENT ID = 3 
 
     ID = 6, PARRENT ID = 5 
 
    ID = 7, PARRENT ID = 3 
 
    ID = 8, PARRENT ID = 3 
 
ID = 9, PARRENT ID = 0 
 
ID = 10, PARRENT ID = 0 
 
    ID = 11, PARRENT ID = 10 
 
     ID = 12, PARRENT ID = 11 
 
     ID = 13, PARRENT ID = 12 
 
      ID = 14, PARRENT ID 13

我怎麼去呢?

回答

0

你可以創建一個函數,它只返回具有特定父ID的所有行。然後創建一個遞歸函數,該函數輸出結果集和每個元素的所有子元素。這是一些快速的僞代碼:

function getRowsForParentId($id){ 
    //build query with "WHERE parent = id", fetch all rows and return them 
    ... 
    return $rows; 
} 


function printResults($results, $level = 1){ 
    //loop over every result 
    foreach($results as $row){ 
     //print an indented representation of that row 
     echo sprintf("%sid: %s, parent: %s", str_repeat(" ", $level), $row->id, $row->parentId); 
     //print out all childs one level deeper 
     printResults(getRowsForParentId($row->id), $level++); 
    } 
} 

$allRows = getRowsForParentId(0);//fetch all rows from db where parent = 0 
printResults($allRows); 

這應該做你想做的。

也查看在MySQL中存儲分層數據,因爲這是你在這裏做的。

What are the options for storing hierarchical data in a relational database?

0

我想出了一個解決辦法我自己,這就像我想它,但我真的不知道,如果是不好的做法,但我很新的節目。

我做了一個函數,我可以傳入一個值。 在此函數中,我選擇PARAND ID等於我的輸入值的所有行。 然後我有一個foreach循環,其中我得到了earch行的ID。 在這個foreach循環中,我傳遞函數,並將ID作爲值傳遞。

function get_parrents($input) { 

$sql = "SELECT * FROM table WHERE parrent_id = '" . $input . "'"; 
$result = mysqli_query($conn, $sql); 
foreach($result as $item) { 

    $new_item = $item['id']; 

    get_parrents($new_item); 
}; 

};

$ a = 0;

catch_replies($ a);

+0

嗯,是不是我推薦的那種相同的方法? ;) – cb0

+0

哦,忘了提及我不太瞭解你的答案。所以這可能是你的建議,我真的appriciate它的方式。正如我所提到的,我是編程新手,所以很容易混淆。另外,你使用「$ row-> id」等語法,我還沒有學到:P – user2004478