我们更新了下面的遗留PHP,并且我想将嵌套循环转换为JOIN
查询,而不是由于嵌套查询没有输出内容的问题。
为每个类别输出<optgroup>
元素(在数据库中由parentCategory_id=0
描述),并为每个类别添加嵌套<option>
标记非常重要。请参阅下面所需的HTML输出。
任何建议都将不胜感激。非常感谢!
PHP
<select name="category">
<option value="">All categories</option>
<?php
// Get category groups
$q = $db->query("SELECT * FROM categories WHERE parentCategory_id=0 ORDER BY category_id");
while ($parent = $q->fetch_assoc()) {
?>
<optgroup label='<?=$parent["cat_name"];?>'>
<?php
// Find all child categories
$catQ = $db->query("SELECT * FROM categories WHERE parentCategory_id=$parent[category_id]");
while ($category = $catQ->fetch_assoc($catQ)) {
?>
<option value='<?=$category["category_id"];?>' $selected><?=$category["cat_name"];?></option>
<?php } ?>
</optgroup>
<?php }
$q->close();
?>
</select>
HTML
<select name="category">
<option value="">All categories</option>
<optgroup label="Clothing">
<option value="1">Mens</option>
<option value="2">Womens</option>
</optgroup>
<optgroup label="Jewellery">
<option value="3">Gold</option>
<option value="4">Silver</option>
</optgroup>
</select>
答案 0 :(得分:1)
我知道它是遗留代码,但这里的问题是逻辑
只要查看自己的查询。
SELECT * FROM categories WHERE parentCategory_id=0 ORDER BY category_id
SELECT * FROM categories WHERE parentCategory_id=$parent[category_id]
它是同一个表,为什么查询同一个表?
您期望如何加入?在它自己?
JOIN
至少包含2个表,您需要做的是在PHP中重构数据:
$categories = array();
while ($cat = $q->fetch_assoc()){
$categories[$cat['cat_name']][$cat['category_id']] = $cat['cat_type'];
}
然后构建你的选择:
<select name="category">
<option value="">All categories</option>
<?php foreach($categories as $label => $opt): ?>
<optgroup label="<?php echo $label; ?>">
<?php foreach ($opt as $id => $name): ?>
<option value="<?php echo $id; ?>"><?php echo $name; ?></option>
<?php endforeach; ?>
</optgroup>
<?php endforeach; ?>
</select>