@pro100nic

Как сохранить категории с подкатегориями в БД?

Список категорий
$list_category = [
        "автоматика",
        "архитектура",
        "бетонные работы",
        "бурение скважин",
        "двери"=>[
            "деревянные"=>[
                "изготовление",
                "установка",
                "реставрация",
            ],
            "металлические"=>[
                "изготовление",
                "установка",
                "реставрация",
            ],
            "пластиковые"=>[
                "изготовление",
                "установка",
                "реставрация",
            ],
        ],
        "земляные работы",
        "камин",
        "кладка"=>[
            "каменная",
            "кирпичная",
        ],
    ];

Как его сохранить в базе данных (MySQL), чтобы вывести в таком виде:
spoiler
5c14df66e5f12563669614.png
spoiler
5c14e46c955cc876350894.png

Страница со списком категорий
spoiler
5c14dfe254613499227494.png

На эту страницу нужно будет выводить категории первого уровня (прим. Двери, Кладка и т.д)
А подкатегории будут выводится на другой странице при клике на категорию первого уровня ( прим. двери => Изготовление, Установка, Реставрация)

Другая задача на странице Личный кабинет:
Есть список категорий:
spoiler
5c14e1c584848631923349.png

Пользователь, чтобы подать объявление, выбирает нужные ему категории и объявление появится в выбранных им категориях.

Сейчас список категорий в базе хранится в таком виде:
spoiler
5c14e38e61501253793016.png

Тут нет подкатегорий.
Вывожу их на страницу со списком так:
spoiler
<?php
    
        
        require_once "../config/function.php";
        $sql = 'SELECT * FROM categories';
        
            $lastChar = null;
            
            foreach ($conndb->query($sql) as $row):
            
                if ($lastChar !== ($currentChar = mb_convert_case(mb_substr($row['category_name'], 0, 1), CASE_UPPER))): 
        
                    $lastChar = $currentChar;
                    
                    
    ?>
                    
                    <h1 class="bukva" id="bukva_<? echo replaceSymbolRuToLat($lastChar); ?>"><? echo mb_convert_case($lastChar, CASE_LOWER); ?></h1>
        
    <?php 
                
                endif;
            
    ?>
                
            <a href="http://localhost/menu_general/masters_page/masters/masters.php">
        
                <div class="kategoriya">
                    <div class="kolichestvo">0</div>
                    <?php echo $row['category_name'] . "\t"; ?>
                </div>
            
            </a>

    <?php

            endforeach;
    
    ?>

  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
Ликбез по хранению в БД древовидных (иерархических) структур данных
https://gist.github.com/codedokode/10539720
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@zaregan
Добавьте еще одно поле parent_id
Для категорий 1 уровня оно равно NULL
Для 2 (и больше если потребуется) хранит id прямого родителя.
Ответ написан
Ваш ответ на вопрос

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

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