我有以下代码来填充表中的城市。
$cities_query = "SELECT city_name FROM city_selection";
$cities_result = mysql_query($cities_query);
echo "<table>";
while ($row = mysql_fetch_assoc($cities_result))
{
echo "<tr>";
echo "<td>".$row['city_name'] . "</td>";
echo "</tr>";
}
echo "</table>";
现在我需要按地区对每个城市进行分组,因此我创建了名为 city_region_selection
的表并添加了Foreign key
来自新专栏"region_id"
在 city_selection table
至region_id
在新表中。
我现在正在努力使用 PHP 在一个漂亮的 html 表格中呈现这些数据。
是否可以先用region_name填充表行,然后再填充一些包含该区域城市的子行?详情请参阅此图片:
最佳答案
你只需要做一些预处理:
/* SQL
SELECT
city_name,
region_name
FROM
city_selection
NATURAL JOIN city_region_selection
SQL */
$regions = array();
while ($result->fetch()) {
if (!isset($regions[$result->region_name])) {
$regions[$result->region_name] = array();
}
$regions[$result->region_name][] = $result->city_name;
}
以 SQL 为焦点的替代方法
/* SQL
SELECT
region_name,
GROUP_CONCAT(city_name SEPARATOR ',') cities
FROM
city_selection
NATURAL JOIN city_region_selection
GROUP BY
region_name
*/
$regions = array();
while ($result->fetch()) {
$regions[$result->region_name] = explode(',', $result->city_name);
}
帮助
请注意,while
语法只是被删节了。您可能会将其替换为
while ($row = mysql_fetch_assoc($cities_result)) {
$regions[$row['region_name']] = explode(',', $row['city_name']);
}
...例如
一旦构建了regions
,只需执行以下操作:
foreach ($regions as $region => $cities) {
echo "<tr><td>$region</td></tr>";
foreach ($cities as $city) {
echo "<tr><td class="tabbed">$city</td></tr>";
}
}
关于php - 使用 php 连接两个 MySQL 表并对结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10688338/