我有以下代码来填充表格中的城市。
$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
新表中的{1}}。
我现在正努力使用PHP在一个漂亮的html表中提供这些数据。
是否可以首先使用region_name填充表格行,然后填充包含该地区城市的一些子行?有关详细信息,请参阅此图片:
答案 0 :(得分:2)
你只需要进行一些预处理:
/* 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
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>";
}
}