@yagyar001

Как сформировать список с вложенным списком из базы mysql?

Всем привет. Не могу никак додуматься как сформировать список с вложенным списком. По сути дела, есть в базе таблица с категориями товаров и подкатегориями. Нужно вывести список так, чтобы подкатегории были вложенным списком категории к которой они относятся. Ребята помогите пожалуйста. Второй день сижу с этим меню. Я учусь только не кидайтесь камнями)
Должно получиться вот так:
5c9d728108ac0363849398.png
Я сделал так:
<?php 
    $query = "SELECT 
                c.id AS categories_id,
                c.category AS categories_category,
                sc.id AS subcategories_id, 
                sc.subcategory AS subcategories_subcategory,
                sc.category AS subcategories_category
            FROM subcategories sc
            RIGHT JOIN categories c ON c.id = sc.category";
    $result = mysqli_query($link, $query) or die (mysqli_error($link));
    for ($data = []; $row = mysqli_fetch_assoc($result); $data[] = $row);
    var_dump($data);
    $content = '';
    foreach ($data as $elem) {
         $content .= "<li class=\"sub\">
                        <a href=\"\">$elem[categories_category]</a>
                    </li>";

            if ($elem['categories_id'] == $elem['subcategories_category']) {
                $content .= "<ul>
                                <li class=\"down_item\">
                                    <a href=\"\">$elem[subcategories_subcategory]</a>
                                </li>
                            </ul>";
            }
    }




?>


И получилось вот так:
5c9d7359cf0b5811770395.png
Вот мои таблицы:
5c9d740130f39065556628.png5c9d7407d2135214565483.png
  • Вопрос задан
  • 430 просмотров
Пригласить эксперта
Ответы на вопрос 1
@kvalood
Для начала стоит поменять структуру БД, сделать одну таблицу categories с колонками
id, name, parent_id (id родителя).
В вашей структуре есть большой изъян, что вы будите делать если будет категория 3 уровня или больше?

Напишите на php небольшую функцию, она будет приводить категории в нужный вид.
function getTree($dataset) {
        $tree = array();

        foreach ($dataset as $id => &$node) {
            //Если нет вложений
            if (!$node->parent_id){
                $tree[$id] = &$node;
            }else{
                //Если есть потомки то переберем массив
                $dataset[$node->parent_id]->childs[$id] = &$node;
            }
        }
        return $tree;
    }


Получаем все категории из бд и вызываем функцию getTree.

А после, при выводе категорий в шаблоне напишите рекурсивную функцию (если есть childs, то вызываем эту же функцию)
Ответ написан
Ваш ответ на вопрос

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

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