2017-08-27 4 views
0

j'ai une table SQL dans laquelle il y a des colonnes id, parentid et le nomsauver ids dans un tableau

je veux tracer parent_id jusqu'à dix niveaux et les stocker dans « niveau [] » un tableau avec pour la boucle

par exemple: i ai un id = 100
ce numéro d'identification a parent_id = 80

ID N ° 80 a une parent_id = 72 ce numéro d'identification a une parent_id = 64 et ainsi de suite ...

de cette façon que je veux sauver ces parent_ids dans un niveau de nom du tableau []

si quelqu'un a besoin de plus d'informations plz comment

Répondre

0

cela fera l'affaire

$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

que je comprends que vous voulez enregistrer certaines données qui alla chercher la base de données dans le tableau de niveau

vous pouvez utiliser PDO avec un style que vous voulez d'extraction PDO Fetch All

0

Puisque vous n'avez pas spécifié le SQL efficace que vous travaillez avec, je vais vous donner l'algorithme:

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 

Ce n'est pas du code SQL, n'essayez pas de l'exécuter. C'est un algorithme qui peut être implémenté en SQL.

EDIT:

Voici comment on peut créer une fonction MySQL stockées: https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

Voici comment on peut concaténer un varchar à un autre dans MySQL: https://bugs.mysql.com/bug.php?id=7642

Voici comment on peut utiliser variables MySQL: https://dev.mysql.com/doc/refman/5.7/en/user-variables.html

Voici comment on peut utiliser un cycle while dans MySQL: https://dev.mysql.com/doc/refman/5.7/en/while.html

Voici comment une procédure stockée MySQL ou la fonction peuvent être appelées à partir de PHP: http://www.devx.com/webdev/Article/42887/0/page/2

, vous avez besoin d'implémenter une fonction stockée dans MySQL qui contiendra un cycle while. Chaque itération du cycle while ajoutera le parent de l'élément trouvé précédemment à un varchar et la fonction stockée renverra un varchar, contenant la généalogie, séparé par une virgule. Vous devrez l'appeler de PHP et vous obtiendrez les ID. A partir de là, vous pouvez utiliser cette chaîne pour le but que vous avez besoin.

+0

i na pas compris un seul mot, im en utilisant effectivement mysqli, les variables php, boucle for .. pouvez-vous montrer cette logrithms en utilisant ces formats – jolly

+0

@jolly, c'est un algorithme, pas un logarithme. Logarithme est une fonction qui fournit la puissance dont vous avez besoin pour augmenter la base pour obtenir le paramètre. Ici, nous parlons d'un algorithme, qui est la façon dont nous planifions le processus de pensée à se produire.Vous aurez besoin de l'implémenter dans MySQL pour éviter d'envoyer à plusieurs reprises des requêtes de PHP. J'ai édité ma réponse pour vous donner plus d'informations. –

0

Vous devez utiliser la fonction récursive pour obtenir tous 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);