Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将查询结果转换为HTML列表_Php_Mysql - Fatal编程技术网

Php 将查询结果转换为HTML列表

Php 将查询结果转换为HTML列表,php,mysql,Php,Mysql,我真的只是把脚伸进了PHP和MySQL领域。我已经按照我想要的方式完成了这项工作,但我知道这很难看,我想知道一个真正知道自己在做什么的人会怎么做 function displayCategoryMenu($db){ echo '<ul class="class">'; foreach($db->query('SELECT * FROM categoryDb, thingDb WHERE category = category AND ca

我真的只是把脚伸进了PHP和MySQL领域。我已经按照我想要的方式完成了这项工作,但我知道这很难看,我想知道一个真正知道自己在做什么的人会怎么做

    function displayCategoryMenu($db){  
       echo '<ul class="class">';
       foreach($db->query('SELECT * FROM categoryDb, thingDb WHERE category = category AND categoryId= "aaa0001"  ORDER BY category, thingName') as $row){
          if($categoryName!== $row['categoryName']){
            $categoryName= $row['CategoryName'];
            echo '<li class="category">'.$categoryName.'</li>';
          }
          echo'<li><a class="fader" href="?&amp;page='.$row['thingId']">'.$row['thingName'].'</a></li>';
      }
      echo '</ul>';

       echo '<ul class="class">';
       foreach($db->query('SELECT * FROM categoryDb, thingDb WHERE category = category AND categoryId= "aaa0002"  ORDER BY category, thingName') as $row){
          if($categoryName!== $row['categoryName']){
            $categoryName= $row['CategoryName'];
            echo '<li class="category">'.$categoryName.'</li>';
          }
          echo'<li><a class="fader" href="?&amp;page='.$row['thingId']">'.$row['thingName'].'</a></li>';
      }
      echo '</ul>';
      $db=null;
    }
函数displayCategoryMenu($db){
echo'
    ; foreach($db->query('SELECT*FROM categoryDb,thingDb其中category=category,categoryId=“aaa001”ORDER BY category,thingName”)作为$row){ 如果($categoryName!=$row['categoryName'])){ $categoryName=$row['categoryName']; 回显“
  • ”.$categoryName.
  • ”; } 回音“
  • ”; } 回声“
”; echo'
    ; foreach($db->query('SELECT*FROM categoryDb,thingDb其中category=category,categoryId=“aaa002”ORDER BY category,thingName”)作为$row){ 如果($categoryName!=$row['categoryName'])){ $categoryName=$row['categoryName']; 回显“
  • ”.$categoryName.
  • ”; } 回音“
  • ”; } 回声“
”; $db=null; }
这基本上会导致无序列表菜单,其中第一个子菜单充当标题:

    <ul>
       <li>category1Name</li>
       <li><a>thing</a></li>
       <li><a>thing</a></li>
       <li><a>thing</a></li>
    </ul>
    <ul>
       <li>category2Name</li>
       <li><a>thing</a></li>
       <li><a>thing</a></li>
       <li><a>thing</a></li>
    </ul>
  • 类别名称
  • 东西
  • 东西
  • 东西
  • 类别名称
  • 东西
  • 东西
  • 东西
或:

类别1

  • 东西
  • 东西
  • 东西
类别2

  • 东西
  • 东西
  • 东西
等等


每个ul代码的唯一区别是“categoryId”(aaa0001、aaa0002等)。我只能想象我正在用我能收集到的最丑陋的代码艰难地进行这项工作。我很想看看应该怎么做。

您应该将类别ID列表存储在数组中的某个位置,在使用变量代替类别ID时对其进行迭代。类似于:

function displayCategoryMenu($db){  
    $categoryIds = array('aaa0001', 'aaa0002');

    foreach ($categoryIds as $categoryId) {
        echo '<ul class="class">';
        foreach($db->query('SELECT * FROM categoryDb, thingDb WHERE category = category AND categoryId= "' . $categoryId . '"  ORDER BY category, thingName') as $row) {
            if($categoryName !== $row['categoryName']){
                $categoryName = $row['CategoryName'];
                echo '<li class="category">' . $categoryName . '</li>';
            }
            echo '<li><a class="fader" href="?&amp;page=' . $row['thingId'] . '">' . $row['thingName'] . '</a></li>';
        }
        echo '</ul>';
    }
}
函数displayCategoryMenu($db){
$categoryIds=数组('aaa0001','aaa0002');
foreach($categoryId作为$categoryId){
echo'
    ; foreach($db->query('SELECT*FROM categoryDb,thingDb,其中category=category,categoryId=“”。$categoryId.”“ORDER BY category,thingName”)作为$row){ 如果($categoryName!=$row['categoryName'])){ $categoryName=$row['categoryName']; 回显“
  • ”.$categoryName.
  • ”; } 回音“
  • ”; } 回声“
”; } }
这里的数组
$categoryID
包含您必须显示的ID列表,您可以动态生成它或根据需要将其作为函数参数传递,它很容易扩展。
foreach
循环迭代此数组的每个元素,并对循环中由
$categoryId
变量表示的每个ID执行完全相同的HTML显示和SQL查询作业


侧注关于您的
$db=null行:如果不传递
$db
函数参数,在函数中修改其值的方式不会对原始变量产生任何影响,则此处不需要此行。

取决于要显示的类别:

我建议使用1个查询并循环搜索结果集

那也可以

1) 没有WHERE子句(除非您仍然需要它来连接,因为您有2个WHERE条件)

2) 或者扩展到何处

WHERE categoryId="aaa001" OR categoryId="aaa002" ...
我还建议:

if($categoryName!== $row['categoryName'])
{
    echo '<li class="category">' . $row['CategoryName'] . '</li>';
}
if($categoryName!=$row['categoryName']))
{
回显“
  • ”.$row['CategoryName'.
  • ”; }

    您可以将函数重命名为“writeCategoryMenu”。

    尝试类似的操作。。我想这要容易得多。。。 对于调试,我建议您使用,即
    $sql\u query

    <?php
    function displayCategoryMenu($db){  
    
        $sql_query  =  'SELECT * FROM 
                            categoryDb 
                        LEFT JOIN thingDb
                            ON categoryDb.category = thingDb.category
                        WHERE
                            thingDb.visible = 1                     
                        ORDER BY 
                            thingDb.category ASC, 
                            thingDb.thingName';
    
        $result = $db->query($sql_query);
        if(!mysql_error()){
    
        foreach ($result as $row) {
            if($currentcategory <> $row['CategoryName']){
                $output .=  '<ul class="class">';
                $output .=  '   <li class="category">'.$categoryName.'</li>';
                $output .=  '   <li><a class="fader" href="?&amp;page='.$row['thingId'].'">'.$row['thingName'].'</a></li>';
                $output .=  '</ul>';
            } else {
                $output .=  '<li><a class="fader" href="?&amp;page='.$row['thingId'].'">'.$row['thingName'].'</a></li>';
            }
    
            $currentcategory = $row['CategoryName'];
    
        }
        }else{
            $output = mysql_error().'<br>QUERY: '.$sql_query;
        }
    
        echo $output;
    
    ?>
    

    使用与您相同的功能,我会同时选择所有类别和内容,如下所示:

    function renderCategoryMenus($db, $category_id_array)
    {  
       // Convery array('a00','b00') to string "'a00','b00'"
       $category_ids = "'" . implode("','", $category_id_array) "'";
    
       // Change * to just the fields you need
       // Use a join
       // WHERE id IN ('a00','b00')
    
       $query = 
          'SELECT CategoryName, thingName 
          FROM categoryDb 
          INNER JOIN thingDb 
          ON categoryDb.category = thingDb.category 
          WHERE categoryId IN \''. $category_ids .'\'  
          ORDER BY category, thingName'; 
    
       $results = $db->query($query);
    
       // Initialize your variables
       $output = '';
       $categoryName = '';
    
       foreach($results as $row) 
       {
          if ($categoryName != $row['categoryName']) // If this is a new category
          {
             if ($categoryName != '') // And it is NOT the first new category
             {
                $output .= '</ul>'; // End off the previous category
             }         
    
             $categoryName = $row['CategoryName'];
    
             // Store your output into a variable so you can return it
             $output .= '<ul class="class"><li class="category">' . 
                $categoryName . '</li>';
          }
    
          $output .= '<li><a class="fader" href="?&amp;page=' . 
             $row['thingId'] . '>' . $row['thingName'] . '</a></li>';
       }
    
       // End off the last category
       if ($output != '') // If we had any categories whatsoever
       {
          $output .= '</ul>';
       }
    
        return $output;
    }    
    
    echo renderCategoryMenus($db, array('aaa0001', 'aaa0002'));
    
    函数renderCategory菜单($db、$category\u id\u数组)
    {  
    //转换数组('a00','b00')到字符串“'a00','b00'”
    $category_id=“”。内爆(“,”,$category_id_array)”;
    //将*更改为所需的字段
    //使用连接
    //其中id位于('a00','b00')
    $query=
    '选择CategoryName,thingName
    从类别B
    内部连接件
    在categoryDb.category=thingDb.category上
    其中categoryId位于\'.$category\u id.\'
    按类别排序,物品名称';
    $results=$db->query($query);
    //初始化变量
    $output='';
    $categoryName='';
    foreach($结果为$行)
    {
    if($categoryName!=$row['categoryName'])//如果这是一个新类别
    {
    if($categoryName!='')//并且它不是第一个新类别
    {
    $output.='';//结束上一个类别
    }         
    $categoryName=$row['categoryName'];
    //将输出存储到变量中,以便可以返回它
    $output.='
    • '。 $categoryName.“
    • ”; } $output.='
    • '; } //结束最后一类 if($output!='')//如果我们有任何类别 { $output.='
    '; } 返回$output; } echo RenderCategory菜单($db,数组('aaa0001','aaa0002');
    一种更简单的方法是使用像Yii这样的对象关系映射器

    使用,您可以做如下简单的事情:

    function renderCategoryAsMenu($category)
    {  
       $output .= '<ul class="class"><li class="category">' . 
          $categoryName . '</li>';      
    
       // This bit actually selects all 'things' in this 'category'
       foreach ($category->things as $thing)   
          $output .= '<li><a class="fader" href="?&amp;page=' . 
             $thing->thingId . '>' . $thing->thingName . '</a></li>';
       }
    
       $output .= '</ul>';
    
        return $output;
    }    
    
    $category_keys = array('a00','b00');
    $categories = Category::model()->findAllByPk($category_keys);
    
    $output = '';
    foreach ($categories as $category)
    {
       $output .= renderCategoryAsMenu();
    }
    echo output;
    
    函数renderCategory菜单($category)
    {  
    $output.='
    • '。 $categoryName.“
    • ”; //该位实际上选择了该“类别”中的所有“事物” foreach($category->things as$thing) $output.='
    • function renderCategoryAsMenu($category)
      {  
         $output .= '<ul class="class"><li class="category">' . 
            $categoryName . '</li>';      
      
         // This bit actually selects all 'things' in this 'category'
         foreach ($category->things as $thing)   
            $output .= '<li><a class="fader" href="?&amp;page=' . 
               $thing->thingId . '>' . $thing->thingName . '</a></li>';
         }
      
         $output .= '</ul>';
      
          return $output;
      }    
      
      $category_keys = array('a00','b00');
      $categories = Category::model()->findAllByPk($category_keys);
      
      $output = '';
      foreach ($categories as $category)
      {
         $output .= renderCategoryAsMenu();
      }
      echo output;