显示按类别分组的结果

时间:2014-11-16 11:46:52

标签: php mysql

好吧我不知道如何更好地说出标题,但希望我能在这里更好地解释:

我有一个动物数据库,有几列,其中一列名为Category,其中包含一个单词字符串,例如frognewt

我可以在两个单独的查询中成功地查询数据库并分别打印结果,但理想情况下我想使用单个查询然后拆分数据以将结果打印到页面但是在两个部分中,一个青蛙和蝾螈。

目前我的代码如下:

    $query =    "SELECT * FROM livestock WHERE Category = 'frog' OR Category = 'newt'";

    $result = mysqli_query($con, $query) or die(mysqli_error($con));  

    echo"<div class='rowtable'>";

    while($row = mysqli_fetch_array($result)){

        $commondraft = $entry['Name'];

        echo"<a href='/stocklist/".$entry['id']."/".commonName($commondraft)."' class='row'>";
        echo"<div class='common'>".$entry['Name']."</div>"; 
        echo"<div class='descr'>".$row['Description']."</div>";
        echo"<div class='sex'>".$row['Sex']."</div>"; 
        echo"<div class='age'>".$row['Age']."</div>"; 
        echo"<div class='size'>".$row['Size']."</div>";  
        echo"<div class='origin'>".$row['Origin']."</div>"; 
        echo"<div class='scientific'>".$row['Scientific']."</div>"; 
        echo"<div class='prices'>".$row['Price']."</div>"; 

        echo"</a>";
        }
    echo"</div>";

这显然会打印出frognewt两个类别的所有条目。如何在此处仅选择一个类别,然后在其他地方使用其他类别,而无需仅为其余类别重新查询数据库?

1 个答案:

答案 0 :(得分:1)

您可以执行其他人建议的操作(order by Category),但我认为这将是更好的解决方案:当您从livestock表中检索项目时,您可以将它们放在每个类别的单独数组中。我的意思是,您可以使用$items数组(在我的示例中)作为字典(哈希映射),其中键是类别名称,值是属于该类别的所有项目的数组。稍后,当您想要从某个类别输出项目时,只需使用所需类别调用output函数。例如(我已经简化了输出;您可以将其用于任何数量的类别。您只需要更改$query中的getItems):

    function getItems($con) {
      $items = array();
      $query =    "SELECT * FROM livestock WHERE Category = 'frog' OR Category = 'newt'";
      $result = mysqli_query($con, $query) or die(mysqli_error($con));  
      while($row = mysqli_fetch_array($result)) {
         $category = $row['Category'];
         if (!isset($items[$category])) {
            $items[$category] = array();
         }
         array_push($items[$category], $row);
      }
      return $items;
   }

   function output($category, $items) {
      echo"<div class='rowtable'>";
      foreach ($items[$category] as $entry) {
          echo"<div class='common'>".$entry['Name']."</div>"; 
      }
      echo"</div>";
   }

   $items = getItems($con); // $con holds connection to database
   output('frog', $items); // prints just items from frog category
   output('newt', $items); // prints just items from newt category