@oldzas

Как получить все ID вышестоящих категорий?

Добрый день.

Делаю вывод категорий, по примеру статьи: https://phpdes.com/php/postroenie-dereva-kategorij...

INSERT INTO `categories` (`id`, `parent_id`, `name`) VALUES
(1, 0, 'Раздел 1'),
(2, 0, 'Раздел 2'),
(3, 0, 'Раздел 3'),
(4, 1, 'Раздел 1.1'),
(5, 1, 'Раздел 1.2'),
(6, 4, 'Раздел 1.1.1'),
(7, 2, 'Раздел 2.1'),
(8, 2, 'Раздел 2.2'),
(9, 3, 'Раздел 3.1');


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


function build_tree($cats,$parent_id,$only_parent = false){
    if(is_array($cats) and isset($cats[$parent_id])){
        $tree = '<ul>';
        if($only_parent==false){
            foreach($cats[$parent_id] as $cat){
                $tree .= '<li>'.$cat['name'].' #'.$cat['id'];
                $tree .=  build_tree($cats,$cat['id']);
                $tree .= '</li>';
            }
        }elseif(is_numeric($only_parent)){
            $cat = $cats[$parent_id][$only_parent];
            $tree .= '<li>'.$cat['name'].' #'.$cat['id'];
            $tree .=  build_tree($cats,$cat['id']);
            $tree .= '</li>';
        }
        $tree .= '</ul>';
    }
    else return null;
    return $tree;
}


Но в моей структуре сайта товары принадлежат только конечной категории, а как получить товары от рутовой категории я не понимаю. То есть я не могу написать логику:

Если конечная категория - то как получить ее ID (текущей категории) ?
Иначе: как получить список ID всех вышестоящих категорий ?


Спасибо.
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Добавьте ещё одно json-поле для "хлебных крошек", где укажите (при создании категории) все id и их имена от корневой до текущей, включая саму текущую.

И проблема с рекурсивной выборкой из БД, включающая нагрузку на БД - сразу пропадёт.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
В цикле.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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