繁体   English   中英

如何放入 <select>数据库中的类别和子类别?

[英]How to put in a <select> categories and Subcategories from a DB?

我真的很想做这样的事情http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_optgroup但我在数据库中有主要类别和子类别,而且我真的不知道如何管理这在一段时间内。 我怎样才能做到这一点 ? 实际上周期是这样的,但是由于我的需要,我不能再使用它了

<select  class="form-control" id="subcategory" name="subcategory" required>
<?php
   $categories="SELECT Name,Category FROM SubCategory ORDER BY Category ASC, Name ASC;";
   $query_categories=mysqli_query($connh,$categories);

      while($rows_categories=mysqli_fetch_array($query_categories)){

echo'<option>'.$rows_categories['Category'].'/'.$rows_categories['Name'].'</option>';  
                                                                    } 
?>
</select>

ps:类别是主要类别,名称是子类别

我想将主类别归入<optgroup>但是由于一个类别包含多个子类别,所以我不知道如何将<optgroup>放置为仅显示一次主类别,而不是针对每条记录显示一次。

在您的情况下,如果当前主要类别已添加到html上,则需要标记;如果我了解您数据库中的字段,名称和类别具有字符串值,并且您不需要两个或两个查询,而只需检查变量,如下所示:

<select  class="form-control" id="subcategory" name="subcategory" required>
<?php
$categories="SELECT Name,Category FROM SubCategory ORDER BY Category ASC, Name ASC;";
$query_categories=mysqli_query($connh,$categories);

$currentMainCategory = null;
while($rows_categories=mysqli_fetch_array($query_categories)){
    // check if your current category was diferent of row category
    if($currentMainCategory != $rows_categories['Category']) {
         // check if is not null (for close </optgroup>)
         if(!is_null($currentMainCategory)) {
              echo '</optgroup>';
         }
         // set your new current category for this loop
         $currentMainCategory = $rows_categories['Category'];
         echo '<optgroup label="'. $rows_categories['Category'] .'">';
    }
    // do not forget put value of this category if you needed
    echo'<option>' . $rows_categories['Name'] . '</option>';  
}

// then check again for close last optgroup if is opened
if(!is_null($currentMainCategory)) {
   echo '</optgroup>';
}
?>
</select>

您离实现基本目标还不算太远,该基本目标是显示optgroup中的类别和子类别。

您可以:

  1. 使用两个单独的查询查询MySQL,然后使用PHP针对SubCategoryCategory表将它们组合在一起。

  2. 执行两个foreach环路,每个含有optgroup用于各个CategorySubCategory的结果。

要么

  1. 使用OUTER JOIN使用一个查询查询MySQL,以针对SubCategoryCategory表(甚至可能是UNION )检索一个结果集。
  2. 执行两个foreach环路,每个含有optgroup用于各个CategorySubCategory的结果,但只显示Category ,如果它从传来的结果Category表,并且反之亦然。

这是一些参考资料:

MySQL连结: https//www.sitepoint.com/understanding-sql-joins-mysql-database/

MySQL Union: 结合两个单独的MySQL查询的结果

PHP Foreach循环: http : //php.net/manual/en/control-structures.foreach.php

PHP阵列合并: http : //www.w3schools.com/php/func_array_merge.asp

<select  class="form-control" id="subcategory" name="subcategory" required>
<?php
$categories="SELECT Name,Category FROM SubCategory ORDER BY Category ASC, Name ASC;";
$query_categories=mysqli_query($connh,$categories);
$category_name_old = '';
while($rows_categories=mysqli_fetch_array($query_categories)){

    if($rows_categories['Category'] != $category_name_old) {
        echo "<optgroup label=".$rows_categories['Category'].">";
        echo "<option>".$rows_categories['Name']."</option>";
    }
    else {
        echo "<option>".$rows_categories['Name']."</option>";
    }
    $category_name_old = $rows_categories['Category'];
    if($category != $category_name_old) {
        echo "</optgroup>";
    }
}  
                                                                    } 
?>
</select>

你可以这样

创建一个具有主要类别的数组,并将子类别作为子数组。

<select  class="form-control" id="subcategory" name="subcategory" required>
<?php
$option_list = array();

$categories="SELECT Name,Category FROM SubCategory ORDER BY Category ASC, Name ASC;";
$query_categories=mysqli_query($connh,$categories);

while($rows_categories=mysqli_fetch_array($query_categories)){  
    $option_list[$rows_categories['Category']][] = $rows_categories['Name'];
}

// this is what we're aiming for
// $option_list = array("Maincat1"=>array("subcat1","subcat2","subcat3"),"Maincat2"=>array("subcat4","subcat5"));


foreach($option_list as $maincat=>$subcats){
    echo "<optgroup label='".$maincat."'>";
    foreach($subcats as $subcat){
        echo "<option value='$subcat'>$subcat</option>";
    }
    echo "</optgroup>";
}
?>
</select>
<?php
$conn = mysqli_connect($mysql_hostname, $mysql_user, $mysql_password,$mysql_database) or die("Could not connect database");
$result = mysqli_query($conn,"select distinct Category from SubCategory");
echo '<select  class="form-control" id="subcategory" name="subcategory" required>';
while($row = mysqli_fetch_assoc($result)){  
    echo '<optgroup label="'. $row['Category'] .'">';
     $data =  mysqli_query($conn,"SELECT Name,Category FROM SubCategory where Category = '".$row['Category']."'");
while($value = mysqli_fetch_assoc($data)){  
    echo '<option>'. $value['Name'] .'</option>';
}
 echo '</optgroup>';
}
echo '</select>';
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM