Создайте подменю из таблицы MySql с переполнением стека

У меня следующая структура данных:

|--------|----------|-----------|------------|-----------------|
| NAV_Id | NAV_Name | NAV_Order | NAV_Parent | NAV_ParentOrder |
|--------|----------|-----------|------------|-----------------|
|      1 |     Home |         1 |         no |               0 |
|      2 |   Fruits |         2 |        yes |               0 |
|      3 |   Apples |         2 |         no |               1 |
|      4 |    Pears |         2 |         no |               2 |
|--------|----------|-----------|------------|-----------------|
  • NAV_Order это позиция навигации в моем меню.
  • NAV_Parent если у элемента есть подменю.
  • NAV_ParentOrder порядок расположения элемента в подменю.

Мой желаемый результат следующий:

<ol class="dd-list">
<li class="dd-item" data-id="1">
<div class="dd-handle">Home</div>
</li>
<li class="dd-item" data-id="2">
<div class="dd-handle">Fruits</div>
<ol class="dd-list">
<li class="dd-item" data-id="3"><div class="dd-handle">Apples</div></li>
<li class="dd-item" data-id="4"><div class="dd-handle">Pears</div></li>
</ol>
</li>
</ol>

Как, из моей структуры базы данных, я могу отразить этот вывод, пожалуйста?

Вот что я пытаюсь на самом деле:

$query = $pdo->prepare('SELECT * FROM ___Navigation');
$query->execute();

while ($fetch = $query->fetch(PDO::FETCH_ASSOC)) {
if(NAV_Parent == 0) {
echo '<li class="dd-item" data-id="'.$fetch[NAV_Id].'"><div class="dd-handle">'.$fetch[NAV_Name].'</div></li>';
}
else {
echo '<li class="dd-item" data-id="'.$fetch[NAV_Id].'"><div class="dd-handle">'.$fetch[NAV_Name].'</div></li>';
foreach($fetch[NAV_ParentOrder]) {
echo '<li class="dd-item" data-id="'.$fetch[NAV_Id].'"><div class="dd-handle">'.$fetch[NAV_Name].'</div></li>';
}
}
}

Но я полностью потерян …

1

Решение

как насчет :

$query = $pdo->prepare('SELECT * FROM ___Navigation WHERE NAV_ParentOrder=0 ORDER BY NAV_Order');
$query->execute();
while ($fetch = $query->fetch(PDO::FETCH_ASSOC)) {
//your parent menu
print '<li class="dd-item" data-id="' . $fetch[NAV_Id] . '"><div class="dd-handle">' . $fetch[NAV_Name] . '</div></li>';
$query_child = $pdo->prepare('SELECT * FROM ___Navigation WHERE NAV_ParentOrder !=0 AND NAV_ParentOrder=' . $fetch[NAV_Id] . 'ORDER BY NAV_Order');
$query_child->execute();
//child menu
while ($fetch_child = $query_child->fetch(PDO::FETCH_ASSOC)) {
print '<ol class="dd-list">';
print '<li class="dd-item" data-id="' . $fetch_child[NAV_Id] . '"><div class="dd-handle">' . $fetch_child[NAV_Name] . '</div></li>';
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector