Задать вопрос
@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
  • Вопрос задан
  • 488 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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, то вызываем эту же функцию)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽