2010-07-21 8 views
3

i l'espoir de créer une fonction récursive que je n'ai pas une idée encorefonction récursive base de données de catégorie

c'est mon code pour chercher la catégorie base de données

<?php 
    $sql = mysql_query("SELECT * FROM categories WHERE category_parent = '1' ORDER BY lft ASC"); 
    while($row = mysql_fetch_array($sql)) { 
    echo "<li><a href='/{$row['category_safe_name']}/'>{$row['category_name']}</a>"; 
    $sql2 = mysql_query("SELECT * FROM categories WHERE category_parent = '{$row['category_id']}'"); 
    if(mysql_num_rows($sql2) > 0) 
    echo "<ul>"; 
    while($row2 = mysql_fetch_array($sql2)) { 
    echo "<li><a href='/{$row2['category_safe_name']}/'>{$row2['category_name']}</a><li>"; 
    } 
    if(mysql_num_rows($sql2) > 0) 
    echo "</ul>"; 
    echo "</li>"; 
    } 
    ?> 

Actuellement ce que ça ressemble

Top Category (category_id = 1) 
    Category 
     Sub Category 

Mon code fonctionne pour la catégorie & sous-catégorie. Ce que je prévois de faire est de faire mon code pour supporter des sous-catégories illimitées

Toute aide et conseil sont les bienvenus.

Merci

Répondre

3

je ferais:

<?php 
function getChildren($id=1) { 
    $sql = mysql_query("SELECT * FROM categories WHERE category_parent = '$id' ORDER BY lft ASC"); 
    echo "<ul>"; 
    while($row = mysql_fetch_array($sql)) { 
    echo "<li><a href='/{$row['category_safe_name']}/'>{$row['category_name']}</a>"; 
    getChildren($row['category_id']); 
    echo "</li>"; 
    } 
    echo "</ul>"; 
} 

getChildren(); 
?> 
2

Vous devriez jeter un oeil à Managing Hierarchical Data in MySQL.

Il donne un bon aperçu de certaines approches d'utilisation de données hiérarchiques dans MySQL.

+0

J'utilise une application open source appelée pligg – damien

+0

Est-ce que cela implique que vous n'avez pas de contrôle sur le modèle? Ou ... que dites-vous? –

-1

Quelque chose comme ça?

function getCategories($mid, $categoryParent = 1) 
{ 
    $return = ''; 
    $results = mysql_query("SELECT * FROM categories WHERE category_parent = '$categoryParent' ORDER BY lft ASC", $mid); 
    while($row = mysql_fetch_array($results)) { 
     $return .= "<li><a href='/{$row['category_safe_name']}/'>{$row['category_name']}</a></li>"; 
     $subs = getCategories($mid, $row['category_id']); 
     if (!empty($subs)) { 
      $return .= '<ul>'; 
      $return .= $subs; 
      $return .= '<ul>'; 
     } 
    } 
    return $return; 
} 

$mid = mysql_connect($host, $user, $pass); 
echo getCategories($mid); 

imprimerait toutes vos catégories, bien sûr fixer exactement comment vous voulez, mais cela devrait vous donner une idée de la façon dont les fonctions récursives pourraient travailler

0

Ce que vous devez faire, est de construire une fonction récursive. Autrement dit, une fonction qui s'appelle à l'intérieur. Un exemple:

function getCategories($parent=0) { 
    $res = mysql_query("SELECT * FROM categories WHERE category_parent = '$id' ORDER BY left ASC"); 
    if (mysql_num_rows($res) > 0) { 
     $category = mysql_fetch_object(); 
     echo '<ul>'; 
     echo '<li><a href="' . $category->category_safe_name . '">' . $category->category_name . '</a>'; 
     getCategories($category->category_id); 
     echo '</li>'; 
    } 
} 

Si je l'ai fait en ce qui concerne les fautes de frappe des noms de table et de colonne, puis les échanger de toute évidence pour les valeurs correctes.