У меня есть таблица для категории:
| category_id | category_name | parent_id | 1 | Electronics | 0 | 2 | Mobile Phones | 1 | 3 | Computers | 1 | 4 | Iphone | 2 | 5 | Samsung Galaxy| 2 | 6 | Asus Laptop | 3
Таким образом, эта таблица может хранить неограниченную категорию дочерних элементов для родительской категории.
Теперь то, что я пытаюсь достичь, скажем, что я выбираю «Электроника», тогда появится еще один selectbox со списком значений « Mobile Phones
и Computers
. И затем, если я выберу « Computers
, появится еще один selectbox со списком значений Asus Laptop
.
Я знаю, как закодировать динамический блок выбора, но он не работает с неограниченными подкатегориями.
Это должно работать так (на основе моего мышления).
- Пользователь выбирает категорию из первого selectbox
- Отправить ajax в getcategory.php
- getcategory.php узнает, есть ли какая-либо дочерняя категория из первой выбранной пользователем категории.
- ajax получает данные от getcategory.php
- если данные существуют, jQuery создает новый флажок select и помещает в него извлеченные данные.
- Пользователь выбирает подкатегорию из только что добавленного selectbox
- Отправить ajax в getcategory.php
- getcategory.php выясняет, есть ли какая-либо дочерняя категория из выбранной под пользователем категории.
- ajax получает данные от getcategory.php
- если данные существуют, jQuery создает новый флажок select и помещает в него извлеченные данные.
- и т. д. до тех пор, пока selectbox не будет иметь дочернюю категорию.
Как мне это достичь? Правильно ли это? или Есть ли другой способ обхода этого? спасибо
Пожалуйста, используйте ниже код 1) conf.php
<?php
$ conn = mysqli_connect ('localhost', 'root', 'root', 'test') или die (mysqli_error ($ conn));?>
2) категория-dropdown.php
<?php include 'conf.php'; $query = 'SELECT * FROM category WHERE parent_id=0'; $result = mysqli_query($conn,$query); $data = $result->fetch_all(MYSQLI_ASSOC); ?> <!DOCTYPE html> <html lang="en"> <head> <title>MultiDropdown</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-4"> <select name="category" class="form-control category"> <option value="">Select</option> <?php foreach($data as $d){ echo '<option value="'.$d['id'].'">'.$d['category'].'</option>'; } ?> </select> </div> </div> <div id="dropdown_container"></div> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"> </script> <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> <script> $(document).ready(function(){ $(document).on('change','.category',function(){ var id = $(this).val(); $.ajax({ url:'getcategory.php', type:'post', data:{'id':id}, success:function(data){ //alert(data); $('#dropdown_container').append(data); } }) }); }); </script> </body> </html>
3) getcategory.php
<?php include 'conf.php'; if(isset($_POST['id'])){ $id= $_POST['id']; $query = 'SELECT * FROM category WHERE parent_id = '.$id; $result = mysqli_query($conn,$query); $data = $result->fetch_all(MYSQLI_ASSOC); if(!empty($data)){ echo '<div class="row"> <div class="col-md-4"> <select name="category" class="form-control category"> <option value="">Select</option>'; foreach($data as $d){ echo '<option value="'.$d['id'].'">'.$d['category'].'</option>'; } echo '</select> </div> </div>'; } } ?>
Чтобы найти неограниченные подкошки, не должно быть проблем: (я не знаю, почему у вас есть эта проблема, поскольку вы сказали, что у вас нет проблем с кодированием)
Для неограниченных подколов вы просто вызываете один и тот же SQL для возврата подколов или null:
SELECT * FROM category WHERE parent_id = ?
Следующая тема не в тему ————–
Это может потребоваться немного энергии, если вы хотите показать все продукты выбранной категории и всех ее детей.
Возможно, вам понадобится изменить свой дизайн, чтобы:
id category ------ ---------- 11 Electronics 1101 Mobile Phones 1102 Computers 110101 Iphone 110102 Samsung Galaxy 110201 Asus Laptop
Для вышеописанной версии max 99 child, если вам нужно больше, вы можете увеличить до 3-х цифр и т. Д.
тематическое исследование: найти все продукты, которые находятся в категории 11, и все его дети:
SELECT * FROM products WHERE category_id like '11%'