2017-08-27 64 views
0

我有,其中有ID,parentId的和名稱的列保存IDS在一個數組

我想跟蹤PARENT_ID高達十級,並將其存儲在一個數組「級[]」 有一個SQL表for循環

例如:我有一個id = 100
該id PARENT_ID = 80

ID NO 80具有PARENT_ID = 72 該ID具有PARENT_ID = 64 等等...

這樣,我想這些parent_ids在數組名各級[]保存

如果有人需要更多信息PLZ評論

回答

0

這將這樣的伎倆

$level[0] = $parent_id; 
     for ($i=0; $i<6; $i++) 
     { 
      $j = $i+1; 
      $search = "SELECT parent_id FROM `$database`.`$mem` where id='$level[$i]'"; 
      $result = mysqli_query($con, $search); 
      $row = mysqli_fetch_array($result); 
      $level[$j] = $row['parent_id']; 
     } 
0

據我瞭解,你要保存一些數據從數據庫中讀取的水平陣列

您可以使用PDO與任何風格的獲取你想要PDO Fetch All

0

既然你沒有指定你正在使用的有效SQL,我會給你的算法:

getDescendantsOf(id, limit) 
    result <- id 
    parent <- <select parent id> 
    while not (parent is null) and limit > 0 
     result <- parent + ',' + result 
     parent <- <select parent id> 
     limit <- limit - 1 
    end while 
    return result 
end getDescendantsOf 

這不是SQL代碼,不要試圖執行它。這是一個可以在SQL中實現的算法。

編輯:

這是一個如何創建一個存儲MySQL的函數:https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

這是一個如何在MySQL連接一個VARCHAR到另一個:https://bugs.mysql.com/bug.php?id=7642

這是一個如何使用MySQL中的變量:https://dev.mysql.com/doc/refman/5.7/en/user-variables.html

這是如何在MySQL中使用while循環:https://dev.mysql.com/doc/refman/5.7/en/while.html

這是怎樣一個MySQL的存儲過程或函數可以從PHP被稱爲:http://www.devx.com/webdev/Article/42887/0/page/2

所以,你需要實現在MySQL存儲功能將包含一個while循環。 while循環的每次迭代都會將先前找到的項目的父項前置到varchar,並且存儲的函數將返回一個varchar,其中包含由逗號分隔的族譜。你將需要從PHP調用這個,你會得到這些ID。從那裏你可以使用這個字符串,無論你需要它的目的。

+0

我不理解一個詞,我其實用mysqli的,PHP變量,循環..你可以顯示此logrithms使用這些格式 – jolly

+0

@jolly,這是一個算法,而不是對數。對數是一個函數,它可以產生你需要的功率來提高基礎以獲得參數。這裏我們談論的是一種算法,這是我們計劃思考過程發生的方式。你需要在MySQL中實現這個功能,以避免重複發送來自PHP的請求。我編輯了我的答案給你提供進一步的信息。 –

0

您需要使用遞歸函數來獲取所有parent_id

$link = mysqli_connect("localhost", "user", "password", "dbname"); 

function get_all(&$levels, $parent_id = null) 
{ 
    global $link; 

    $sql = "SELECT * FROM table WHERE parent_id " . ($parent_id ? 'IS NULL' : "= $parent_id"); 
    $result = mysqli_query($link, $sql); 

    if ($result && mysqli_num_rows($result) > 0) { 
     while($row = mysqli_fetch_assoc($result)) { 
      if ($row['parent_id']) { 
       $levels[] = $row['parent_id']; 
      } 
      get_all($levels, $row['id']); 
     } 
    } 
} 

$levels = []; 
get_all($levels);