Php 显示按类别分组的结果

Php 显示按类别分组的结果,php,mysql,Php,Mysql,好的,我不知道如何更好地表达标题,但希望我能在这里更好地解释: 我有一个动物数据库,有几个列,其中一列名为Category,其中包含一个单词字符串,如frog,或newt 我可以在两个单独的查询中成功地查询数据库中的这些内容,并分别打印结果,但理想情况下,我希望使用单个查询,然后分割数据,将结果打印到页面上,但分为两个部分,一个用于青蛙,一个用于蝾螈 当前我的代码如下所示: $query = "SELECT * FROM livestock WHERE Category = 'fr

好的,我不知道如何更好地表达标题,但希望我能在这里更好地解释:

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

我可以在两个单独的查询中成功地查询数据库中的这些内容,并分别打印结果,但理想情况下,我希望使用单个查询,然后分割数据,将结果打印到页面上,但分为两个部分,一个用于青蛙,一个用于蝾螈

当前我的代码如下所示:

    $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>";
$query=“从牲畜中选择*,其中类别='frog'或类别='newt'”;
$result=mysqli_query($con,$query)或die(mysqli_error($con));
回声“;
while($row=mysqli\u fetch\u数组($result)){
$commondraft=$entry['Name'];
回声“;
}
回声“;

这显然会打印出
frog
newt
两个类别的所有条目。如何在这里只选择一个类别,然后在其他地方使用另一个类别,而不重新查询数据库中的剩余类别?

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

函数getItems($con){
$items=array();
$query=“从牲畜中选择*,其中类别='frog'或类别='NETT';
$result=mysqli_query($con,$query)或die(mysqli_error($con));
while($row=mysqli\u fetch\u数组($result)){
$category=$row['category'];
如果(!isset($items[$category])){
$items[$category]=array();
}
数组推送($items[$category],$row);
}
退回$items;
}
函数输出($category,$items){
回声“;
foreach($items[$category]作为$entry){
回显“$entry['Name']”;
}
回声“;
}
$items=getItems($con);//$con保持与数据库的连接
输出('frog',$items);//只打印青蛙类别中的项目
输出('newt',$items);//仅打印newt类别中的项目

在查询中按类别对数据排序,然后通过简单地将循环中每条记录的类别与前一条记录的类别进行比较,实现所谓的分组中断——如果它们不匹配,这就是中断标准。此时,退出循环,并在第二个循环中输出其余记录。(i)按类别对结果进行排序(ii)循环结果并显示它们(iii)当类别发生变化时(即,与前一个不同时)“将显示类别”,并在第二个循环中输出其余记录”…或在同一个循环中,但是在输出不同的头和另一个
行表
DIV或其他东西之后。(通常情况下,您会采用这种分组方式,以便它适用于多个类别,而不仅仅是两个类别。)
    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