Я пытаюсь создать 3-уровневый вложенный список, используя информацию, найденную в 3 отдельных таблицах базы данных, которые связаны между собой, имея общие внешние и первичные ключи. Я до сих пор понял, как создавать первые два уровня списков, то есть первичный список и его подписок, однако мне нужна помощь в создании подсписника подписок. Для того, чтобы в конечном итоге с чем-то похожим на:трехуровневые вложенные списки, сгенерированные из трех таблиц базы данных
<ul>
<li>List
<ul>
<li>Sublist
<ul>
<li>
Super_sublist
</li>
</ul>
</li>
</ul>
</li>
<ul>
Я использую следующий код для создания первой части списка:
function get_menu($sql) {
include 'connect.php';
$result = $conn->query($sql);
if ($result->num_rows > 0);
$current_album = "";
$level2 = "";
echo "<div id='menu'>\n<div class='menu_pos'>\n<ul class='main-navigation'>\n";
while ($row = $result->fetch_assoc()) {
if ($current_album <> "" && $current_album <> $row['pageID']) {
echo "</ul>\n</li>\n";
}
if ($current_album <> $row['pageID']) {
echo "<li id='qoute'><a href='".$row['pageURL']."?pageID=".$row['pageID']."'>".$row['page_name']."</a>\n<ul>\n";
$current_album = $row['pageID'];
}
if ($row['GeneralID'] == NULL) {
echo "";
} else {
echo "<li><a href='#'>".$row['general_name']."</a>\n</li>";
}
}
echo "</ul>\n</div>\n</div>\n";
}
что приводит:
<div id='menu'>
<div class='menu_pos'>
<ul class='main-navigation'>
<li id='qoute'><a href='0?pageID=7'>get quote</a>
<ul>
</ul>
</li>
<li id='qoute'><a href='info.php?pageID=4'>tjänster</a>
<ul>
<li><a href='#'>ovrigt stenarbete</a>
</li><li><a href='#'>lagning av trasiga stenskivor</a>
</li><li><a href='#'>montering av stenmaterial</a>
</li></ul>
</li>
<li id='qoute'><a href='info.php?pageID=3'>produkter</a>
<ul>
</li><li><a href='#'>golvplattor</a>
</li><li><a href='#'>köksbänkskivor</a>
</li><li><a href='#'>diskhoar</a>
</li><li><a href='#'>fönsterbänkar</a>
</li><li><a href='#'>golvplattor</a>
</li><li><a href='#'>fönsterbänkar</a>
</li></ul>
</li>
<li id='qoute'><a href='info.php?pageID=2'>om företaget</a>
<ul>
<li><a href='#'>utställning</a>
</li><li><a href='#'>köpvillkor</a>
</li></ul>
</li>
<li id='qoute'><a href='index.php?pageID=1'>hem</a>
<ul>
</ul>
</div>
</div>
Эти данные генерируются с использованием следующего запроса sql:
select page_list.pageID as pageID, page_list.page_name as page_name,
page_list.pageURL as pageURL, level2_menu.GeneralID as GeneralID,
level2_menu.gener_name as general_name, level3_menu.deepID as deepID,
level3_menu.deep_title as deep_title
FROM page_list
LEFT OUTER JOIN level2_menu on page_list.pageID = level2_menu.pageID
LEFT OUTER JOIN level3_menu on level2_menu.GeneralID = level3_menu.generalID
UNION
select page_list.pageID as pageID, page_list.page_name as page_name,
page_list.pageURL as pageURL, level2_menu.GeneralID as GeneralID,
level2_menu.gener_name as general_name, level3_menu.deepID as deepID,
level3_menu.deep_title as deep_title
FROM page_list
RIGHT OUTER JOIN level2_menu on page_list.pageID = level2_menu.pageID
RIGHT OUTER JOIN level3_menu on level2_menu.GeneralID = level3_menu.generalID
order by pageID desc
Это дает следующий SQL результат: http://sqlfiddle.com/#!9/927a0
+--------------------+------------+----------+-----------+---------------+--------+------------+
| pageID Ascending 1 | page_name | pageURL | GeneralID | general_name | deepID | deep_title |
+--------------------+------------+----------+-----------+---------------+--------+------------+
| 7 | get quote | 0 | NULL | NULL | NULL | NULL |
| 4 | tjanster | info.php | 9 | Title | NULL | NULL |
| 3 | products | info.php | 5 | Title 2 | 8 | Subtitle |
+--------------------+------------+----------+-----------+---------------+--------+------------+
и смешение MySQL API слишком «mysql_error()», а также возможность открытия SQL-инъекции. Пожалуйста, не предлагайте код, который потенциально может поставить под угрозу их базу данных. –
О, я серьезно не знал этого, я просто пытался помочь, должен ли я его удалить? –
Нет, не совсем; это может быть решением для них. Вы можете добавить примечание под ним, чтобы параметризовать их запрос и ссылки на использование подготовленных операторов. –