HTML下拉列表 - 从两个表中获取数据到optgroup&项目清单

时间:2016-12-08 10:32:15

标签: html mysql

我正在使用两个名为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>

1 个答案:

答案 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>";

我希望这会对你有帮助吗?