Алгоритм перечисления иерархии дерева для категорий в одной таблице - PullRequest
2 голосов
/ 08 ноября 2011

У меня есть таблица SQL tbl_categories с этими полями: например,

id , parent , title

, таблица может содержать эту информацию:

id   parent  title
1     0      the main item
2     1      first sub item
3     1      second sub item
4     2      first sub sub item 
5     3      second sub sub item

например: 1 - верхкатегории, 2 и 3 - дети 1, 4 - дети 2, а 5 - дети 3.

Я хочу перечислить эту информацию как древовидную структуру с использованием PHP, например:

- 1. the main item
 -- 2.first sub item
  ---4.first sub sub item
 -- 3. second sub item
  ---5.second sub sub item

и рассмотрите возможность добавления "-" в соответствии с уровнем элемента в дереве.

Итак, вопрос в том, какой алгоритм подходит для этой задачи?

Ответы [ 2 ]

3 голосов
/ 08 ноября 2011

Я предполагаю, что вы используете MySQL:

<code><?php
// connect to the database
$dbh = new PDO("mysql:host=127.0.0.1;port=3306;dbname=test", "root", "");

// prepare a statement that we will reuse
$sth = $dbh->prepare("SELECT * FROM tbl_categories WHERE parent = ?");

// this function will recursively print all children of a given row
// $level marks how much indentation to use
function print_children_of_id( $id, $level ) {
    global $sth;
    // execute the prepared statement with the given $id and fetch all rows
    $sth->execute(array($id));
    $rows = $sth->fetchAll();

    foreach($rows as $row)
    {
        // print the leading indentation
        echo str_repeat(" ", $level) . str_repeat("-", $level) . " ";
        // print the title, making sure we escape special characters
        echo htmlspecialchars($row['title']) . "\n";
        // recursively print all the children
        print_children_of_id($row['id'], $level+1);
    }
}

// now print the root node and all its children
echo "<pre>";
print_children_of_id( 0, 1 );
echo "
"; ?>
1 голос
/ 08 ноября 2011

Какой механизм базы данных вы используете?

В Oracle есть встроенная функция, называемая connect-by-pior.вы ищете что-то похожее в движке базы данных, которое вы используете ...

если mySQL это может помочь -> http://sujay -koduri.blogspot.com / 2007/01 / prior-connect-в-mysql.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...