【问题标题】:PHP: Split MySQLi results by valuePHP:按值拆分 MySQLi 结果
【发布时间】:2013-11-24 13:10:58
【问题描述】:

假设我有一个名为 'products' 的数据库,其中包含 'id'、'desc'、'categ' 字段:(1, 'Banana', 'fruit'), (2, 'Apple', 'fruit') , (3, '番茄', '蔬菜'), (4, '水', '饮料')。

我如何执行或更好地:评估此数据库上的查询,以便我可以根据其类别将结果分成几部分?我的目标是我可以插入一些标题,例如

水果:

香蕉、苹果

蔬菜:

番茄

等等。

基本代码如下

$con = mysqli_connect(/*etc.*/);
$result = mysqli_query('SELECT * FROM products ORDER BY `categ`');
mysqli_close($con);

while($row = mysqli_fetch_array($result)) {
    // How to handle this?
}

【问题讨论】:

  • 在这种情况下,我将当前类别分配给一个变量,并在循环的每一步检查当前类别是否等于前一个类别。如果不同,我将类别名称打印为标题。
  • 作品,作为答案发布。
  • 抱歉懒惰 :) 现在发布我的方法作为答案。

标签: php mysql mysqli


【解决方案1】:

有很多方法,但您可以例如将所有不同的类别收集到数组中以供以后显示/操作:

while($row = mysqli_fetch_array($result)) {    
  if ($row['categ'] == "fruit") $fruit_array[] = $row['desc'];
  elseif ($row['categ'] == "vegetables") $vegetable_array[] = $row['desc'];
  //etc...
}

然后你可以:

echo "<h1>Fruit</h1>";
foreach ($fruit_array as $fruit) {
    echo $fruit."<br>";
} //etc...

【讨论】:

    【解决方案2】:

    这是我的方法:

    $con = mysqli_connect(/*etc.*/);
    $result = mysqli_query('SELECT * FROM products ORDER BY `categ`');
    mysqli_close($con);
    
    //Assigning a temporary variable to hold current category
    $previousCategory = '';
    while($row = mysqli_fetch_array($result)) {
      $thisCategory = $row['categ'];
      //Comparing this category with previous one
      if($thisCategory != $previousCategory) {
        //Printing category as title
        echo '<b>'.$thisCategory.':</b><br />';
      }
      //Printing product
      echo $row['product_name'].' ';
    
      //Now storing this category to compare with next one
      $previousCategory = $thisCategory;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多