Вывод списка подкатегорий учитывая выбранного родителя

Рейтинг: 0Ответов: 1Опубликовано: 29.01.2023

Всем привет! Помогите найти решение. Есть продукты product. У продуктов есть связь с таблицами отвечающие за категорию category и подкатегорию category_sub. При создании нового продукта product и выборе продукта, категории и подкатегории все работает. Сначала я выбираю список category потом ajax запрос подгружает во второй выпадающий список подкатегории category_sub. Проблема в странице редактирования продукта product. Я могу отобразить выпадающий список текущей категории, но не получается отобразить список текущей подкатегории, чтобы список подкатегории выводил список учитывая какая родительская категория.

Таблица product

prod_id product_name product_cat product_subcat
1 Булочка с изюмом 1 2
2 Батон нарезной 1 1
3 Лего набор 2 3

Таблица category

cat_id cat_name
1 Еда
2 Игрушки

Таблица category_sub

subcat_id subcat_name subcat_rod
1 Хлеб 1
2 Булочки 1
3 Конструкторы 2
4 Пончик 1

К примеру если я редактирую prod_id №1 (Булочка с изюмом )

то на странице редактирования мне нужно в первом выпадающем списке отобразить помеченную текущую категорию <option selected>Еда</option> и при раскрытии списка показать остальные категории а во втором выпадающем списке мне нужно отобразить текущую подкатегорию продукта <option selected>Булочки</option> и вывести список всех подкатегорий текущей категории Еда

Первый выпадающий список (категории)

(тут все норм)

<div class="mb-3">
                  <div class="form-label">Категория</div>
                  <select class="form-select" id="category_filter" name="cat_id">
                    <?php
                    $stmt = $db->prepare("SELECT * FROM category");
                    $stmt->execute();
                    $categories = $stmt->fetchAll();
                    foreach($categories as $category) {

                      if ($sercat == $category["id"]):
                        echo '<option selected name="'.$category['cat_id'].'" value="'.$category['cat_id'].'">'.$category['cat_name'].'</option>';

                      else:
                        echo '<option name="'.$category['cat_id'].'" value="'.$category['cat_id'].'">'.$category['cat_name'].'</option>';

                  endif;
                    }
                    ?>
                  </select>
                </div>

Второй выпадающий список (подкатегории) <- вот тут как раз проблема

<div class="mb-3">
                  <div class="form-label">Подкатегория</div>
                  <select class="form-select" id="subcat" name="subcat">
                      <?php
                      $stmt = $db->prepare("SELECT * FROM category_sub");
                      $stmt->execute();
                      $categories = $stmt->fetchAll();
                      foreach($categories as $category) {

                        if ($sersubcat == $category["subcat_id"]):
                          echo '<option selected name="'.$category['subcat_id'].'" value="'.$category['subcat_id'].'">'.$category['subcat_name'].'</option>';

                        else:
                          echo '<option name="'.$category['subcat_id'].'" value="'.$category['subcat_id'].'">'.$category['subcat_name'].'</option>';

                    endif;
                      }
                      ?>
                  </select>
                </div> 

Ответы

▲ 0

Не надо столько таблиц в базе. Запросы к ней будут дольше, нагрузка выше. Сделай одну таблицу в которой одна строка - это самая низжая из категорий.

Т.е вот так: Таблица category: id cat_name subcat_name

1 - Булочки - Булочка с изюмом 2 - Булочки - Булочка с творогом 3 - Хлеб - Батон 4 - Хлеб - Ржаной

И когда надо будет вывести сначала главные категории: SELECT DISTINCT cat_name FROM category

И потом в этом foreach чтобы вывести подкатегории: SELECT * FROM category WHERE cat_name = '{$cat_name}'