Задать вопрос

Как разбить дерево по страницам(PHP+MySQL)?

Имеется таблица, в ней значения:
term_IDterm_parentterm_title
10Без рубрики
21Новости
32Спорт
43Тенис
50Статьи


Делаю запрос в БД:
//Выбираем данные из БД
$result=mysql_query("SELECT * FROM  terms");
//Если в базе данных есть записи, формируем массив
if   (mysql_num_rows($result) > 0){
    $cats = array();
//В цикле формируем массив разделов, ключом будет id родительской категории, а также массив разделов, ключом будет id категории
    while($cat =  mysql_fetch_assoc($result)){
        $cats_ID[$cat['term_ID']][] = $cat;
        $cats[$cat['term_parent']][$cat['term_ID']] =  $cat;
    }
}

Результирующий массив:
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [term_ID] => 1
                    [term_parent] => 0
                    [term_title] => Без рубрики
                )

            [1] => Array
                (
                    [term_ID] => 5
                    [term_parent] => 0
                    [term_title] => Статьи
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [term_ID] => 2
                    [term_parent] => 1
                    [term_title] => Новости
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [term_ID] => 3
                    [term_parent] => 2
                    [term_title] => Спорт
                )

        )

    [3] => Array
        (
            [0] => Array
                (
                    [term_ID] => 4
                    [term_parent] => 3
                    [term_title] => Тенис
                )

        )

)

С помощью функции осуществляю элементарный вывод:
echo build_tree($cats,0);
function build_tree($cats,$parent_id,$only_parent = false){
    if(is_array($cats) and isset($cats[$term_parent])){
        $tree = '<ul>';
        if($only_parent==false){
            foreach($cats[$parent_id] as $cat){
                $tree .= '<li>'.$cat['term_title'].' #'.$cat['term_ID'];
                $tree .=  build_tree($cats,$cat['term_ID']);
                $tree .= '</li>';
            }
        }elseif(is_numeric($only_parent)){
            $cat = $cats[$parent_id][$only_parent];
            $tree .= '<li>'.$cat['term_title'].' #'.$cat['term_ID'];
            $tree .=  build_tree($cats,$cat['term_ID']);
            $tree .= '</li>';
        }
        $tree .= '</ul>';
    }
    else return null;
    return $tree;
}


Получаем что то вида:
Без рубрики
-Новости
--Спорт
---Тенис
Статьи

И вот появилась необходимость в постраничной навигации так как информации стало порядка сотни и нужно разбить по страницам, но! Есть Важное но, если при выборке ограничится limit 0,2 - 2,4 и т.д То результат будет такой:
Стр 1:
Без рубрики
-Новости

Стр 2:
--Спорт
---Тенис

Необходимо выводить так же предков если выводится чей то потомок, т.е нужно вот так:
Стр 2:
Без рубрики
-Новости
--Спорт
---Тенис

Стр 3:
Статьи

Подобное реализовано в wordpress в панели администратора при выводе категорий, там есть постраничная навигация.
Подскажите как реализовать задуманное?
  • Вопрос задан
  • 568 просмотров
Подписаться 3 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 2
IvanTheCrazy
@IvanTheCrazy
Используйте nested set. Вы будете выбирать все дерево одним простым select'ом, к которому можно применить limit.
www.getinfo.ru/article610.html
Ответ написан
Комментировать
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Собираете полностью дерево, потом обрезаете N элементов от начала, учитывая под элементы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы