@krekerov
Fullstack ninja

Как реализовать поиск по иерархическому дереву?

Приветствую.
Есть код:
<?php
$result = mysql_query ("SELECT `id`, `parent_id`, `name` FROM `catalog_cats`"); 
 
$cats = array(); // тут будет наш массив с категориями каталога
// в цикле формируем нужный нам массив
  while($cat =  mysql_fetch_assoc($result))
        $cats[$cat['parent_id']][] =  $cat;
// далее наша главная, рекурсивная функция, которая сформирует дерево категорий
function create_tree ($cats,$parent_id){
  if(is_array($cats) and  isset($cats[$parent_id])){
    $tree = '<ul>';
    foreach($cats[$parent_id] as $cat){
       $tree .= "<li><a href='catalog.html?catid=".$cat['id']."'>".$cat['name']."</a>";
       $tree .=  create_tree ($cats,$cat['id']);
       $tree .= '</li>';         
    }
    $tree .= '</ul>';
  } 
  else return null;          
return $tree;        
} 
 
// вызываем функцию и строим дерево
echo create_tree ($cats, 0);
?>


Как алгоритмически выполняется поиск по этому дереву?
Если сейчас без иерархии я ищу $sql = "SELECT id, name FROM company WHERE city='Чтото'";
Как сделать поиск в категории, если эта категория содержит еще внутри категории и элементы.
  • Вопрос задан
  • 2852 просмотра
Решения вопроса 1
примерно поиск можно выполнять так

SELECT * FROM company WHERE category_id regexp '[[:<:]](".$cat_id.")[[:>:]]' AND city='Чтото'

где $cat_id строиться переменная со списком категорий 11|12|13|14
т.е. ты находишься в родителе с ИД 10, тебе нужна рекурсивная функция что бы вывести список категорий который относится к этому родителю, который будет записываться в переменную $cat_id

пример

$cat_id = get_sub_cat('10'); // возвращает 11|12|13|14|15 т.е. детёныши родителя с ИД 10
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы