mI有一个包含2列的数据库,CITY和REGION。我想填充表单选择输入并按区域分组。
我正在使用Bootstrap 3,我想将optgroup添加到选择输入中,包含我所拥有的每个地区的区域名称,以及所有要遵循的城市,如果这有意义的话。
这样的事情:
<optgroup label="region 1">
<option>city 1</option>
<option>city 2</option>
<option>city 3</option>
<option>......</option>
</optgroup>
<optgroup label="region 2">
<option>city 1</option>
<option>city 2</option>
<option>city 3</option>
<option>......</option>
</optgroup>
<optgroup label="region 3">
<option>city 1</option>
<option>city 2</option>
<option>city 3</option>
<option>......</option>
</optgroup>
&#13;
问题是:我应该如何选择sql来获得我想要的东西? 并按字母顺序排列,区域和城市。
答案 0 :(得分:0)
一种方法是使用 group_concat()
select
region,
group_concat(city order by city) as cities
from table_name
group by region
order by region
以上查询将为您提供所有区域名称和城市,以逗号分隔的内容为
region1 city1,city2,city3
.....
因此,当您遍历记录时,您可以拥有regionname,然后将逗号分隔的城市拆分为数组,并通过循环遍历数组可以生成选项。
在PHP中,它可以作为
完成$conn = new PDO('mysql:host=localhost;dbname=your_db_name', 'user_name', 'password');
$qry = 'select
region,
group_concat(city order by city) as cities
from table_name
group by region
order by region';
$stmt = $conn->prepare($qry);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo '<optgroup label="'.$row['region'].'">';
$cities = explode(",",$row['cities']);
foreach($cities as $city){
echo '<option>'.$city.'</option>';
}
echo '</optgroup>';
}