mysql - Sql SELECT 分组依据和顺序

标签 mysql sql twitter-bootstrap

我有一个包含 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>

问题是:我应该如何执行sql select 来得到我想要的东西? 并按字母顺序对区域和城市进行排序。

最佳答案

一种方法是使用 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
.....

因此,当您循环遍历记录时,您可以获得地区名称,然后将逗号分隔的城市分割为数组,并通过循环数组可以生成选项。

在 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>';
}

关于mysql - Sql SELECT 分组依据和顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27468590/

相关文章:

validation - 在Grails中更改控制组的Twitter Bootstrap验证状态

php - 是否可以使用 ArrayHelper 获取随机值? Yii2

php - 如何使用一个表中的价格数据进行存储在另一个表中的计算?

mysql - Wordnet sqlite 同义词和示例

sql - 一列( bool 值)定义另一列( bool 值),反之亦然

mysql - SQL SELECT WHERE NOT IN 来自同一表查询

twitter-bootstrap - Twitter Bootstrap 模式在 IE7 中不起作用

php - php查询中的MYSQL变量

php - 我正在尝试创建一个 PHP 页面,它将接受输入并创建一个包含该输入的表

css - Twitter Bootstrap - 流体柱上的高度相同