[英]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中的类别和子类别。
您可以:
使用两个单独的查询查询MySQL,然后使用PHP针对SubCategory
和Category
表将它们组合在一起。
执行两个foreach
环路,每个含有optgroup
用于各个Category
和SubCategory
的结果。
要么
OUTER JOIN
使用一个查询查询MySQL,以针对SubCategory
和Category
表(甚至可能是UNION
)检索一个结果集。 foreach
环路,每个含有optgroup
用于各个Category
和SubCategory
的结果,但只显示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.