2015-12-08 2 views
-1

Я пытаюсь создать 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 | 
+--------------------+------------+----------+-----------+---------------+--------+------------+ 

ответ

0

я использую другой способ, используя PHP

<?php 
 
\t \t \t \t $table='page_list'; 
 
\t \t \t \t $sql = "SELECT * FROM $table ORDER BY ID desc" ; 
 
\t \t \t \t $result = mysqli_query($conn, $sql) or die('Erreur SQL !'.$req.'<br>'.mysqli_error($conn)); 
 
\t while($row = $result->fetch_assoc()){ 
 

 
\t $table2='Secondtable'; 
 
\t $name=$row['NAME']; 
 
\t $sql2 = "SELECT * FROM $table2 WHERE Name='$name'"; 
 
\t $result2 = mysqli_query($conn, $sql2) or die('Erreur SQL !'.$req.'<br>'.mysqli_error($conn)); 
 
\t while($row2 = $result2->fetch_assoc()){ 
 
\t \t ?> 
 
\t 
 
html elements here using the $row and $row2 
 

 
<?php ; 
 
} 
 
} 
 
?>
конечно Вы должны модифицировать $ SQL, как вы хотите

вы можете углубиться в это, как многие уровни вы хотите, и вам не нужны какие-либо общие иностранные и первичные ключи. Надеюсь, это поможет

+0

и смешение MySQL API слишком «mysql_error()», а также возможность открытия SQL-инъекции. Пожалуйста, не предлагайте код, который потенциально может поставить под угрозу их базу данных. –

+0

О, я серьезно не знал этого, я просто пытался помочь, должен ли я его удалить? –

+0

Нет, не совсем; это может быть решением для них. Вы можете добавить примечание под ним, чтобы параметризовать их запрос и ссылки на использование подготовленных операторов. –

Смежные вопросы