我正在使用两个名为cat_parent
的表,其中保存了父类别& cat_sub
保存类别项目。
以下是数据库结构。
cat_parent
Column Column Type Null
cat_id int(11) No
category_name varchar(355) No
cat_sub
Column Column Type Null
sub_cat_id int(11) No
profile_category int(10) No
sub_cat_name varchar(355) No
现在我想把所有数据都放到一个html下拉列表中。 在cat_parent表中的category_name中,每个类别都应显示为optgroup。在optgroup下,应显示属于父类别的每个类别项目。
实施例
<select name="sample">
<optgroup label="Cars"> // Data from cat_parent
<option>Benz</option> // Data from cat_sub
<option>Toyota</option> // Data from cat_sub
<optgroup label="Mobile Phones"> // Data from cat_parent
<option>Samsung</option> // Data from cat_sub
<option>Nokia</option> // Data from cat_sub
</select>
答案 0 :(得分:0)
首先需要在cat_sub表中使用外键(我在这里称之为 parent_id )。
<强>查询强>
SELECT cat_sub.sub_cat_name,
cat_par.category_name
FROM cat_sub
JOIN cat_par ON
cat_par.cat_id = cat_sub.parent_id
然后在你的代码中(你使用的语言并不重要)你可以遍历所有行并将所有子类别放在一个关联散列中,其中主键是具有子类别数组的父键。接下来将结果打印到您的html。
PHP [未经过测试,因此可能包含错误。 PS:逻辑应该分成不同的页面!]
#Query
$query= "SELECT cat_sub.sub_cat_name,
cat_par.category_name
FROM cat_sub
JOIN cat_par ON
cat_par.cat_id = cat_sub.parent_id";
#Connection
$connection = new \PDO("mysql:host=$db_host;dbname=$db_name;port=$db_port", $db_user, $db_pass);
#Statement
$stmt = $connection->prepare($query);
$result = $stmt->execute();
if(!$result){
throw new \Exception($query);
}
$objects = $stmt->fetchAll(\PDO::FETCH_OBJ);
#print
echo "<select>";
$parent_cat="";
foreach($objects as $object){
if($parent_cat != $object["category_name"]){
$parent_cat = $object["category_name"];
echo "<optgroup label='".$object["category_name"]."'>";
}
echo "<option>".$object["sub_cat_name"]."</option>";
}
echo "</select>";
我希望这会对你有帮助吗?