从View查询创建无序列表?

时间:2013-07-19 15:36:00

标签: php mysql mysqli

我有一个查询可以产生我需要的结果:

SELECT SHOW_NAME, YEAR, CLASS_NAME FROM vwhandlerresults WHERE HANDLER_ID = $gethandlerid ORDER BY YEAR DESC

SHOW_NAME    YEAR    CLASS_NAME
Show 1       2013    Class 1
Show 1       2013    Class 2
Show 2       2013    Class 1
Show 3       2012    Class 1

等。等

我想在php中创建一个3级无序列表,以便我可以获得类似于以下内容的内容:

2013
     Show 1
          Class 1
          Class 2
     Show 2
          Class 1
2012
     Show 3
          Class 1

我进行了搜索和搜索,根本无法理解它。我把它设置为一个级别(年 - >显示)。从搜索开始,我觉得我可能需要一个阵列?

由于

灰色

1 个答案:

答案 0 :(得分:0)

从技术上讲,您不需要提前构建阵列。您可以使用简单的“状态机”从数据库中提取数据。

echo '<ul>';
$oldyear = null;
$oldshow = null;
while($row = fetch_result($result)) { // grab a row of DB data
   if ($oldyear != $row['year']) {
      echo "<li>{$row['year']}<ul>";
   }
   if ($oldshow != $row['show']) {
     echo "<li>{$row['show']}<ul>";
   }
   echo "<li>{$row['class']}</li>";
}

注意:这不会按原样运作,只是为了让您大致了解如果选择这条路线需要什么

但是,如果你选择使用数组路由,那么它将会提前做一些工作,但是大大简化了输出逻辑:

$data = array();
while($row = fetch_row($result)) {
   $year = $row['year'];
   $show = $row['show'];
   $data[$year][$show][] = $row['class'];
}

echo '<ul>'
foreach($years as $year => $shows) {
   echo '<li>', $year, '<ul>';
   foreach($shows as $show) {
      echo '<li>$show<ul>';
      foreach ($show as $class) {
          echo '<li>', $class, '</li>';
      }
      echo '</ul>';
   }
   echo '</ul>';
}
echo '</ul>';