用php连接两个MySQL表和组结果

时间:2012-05-21 15:42:14

标签: php mysql html-table

我有以下代码来填充表格中的城市。

$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填充表格行,然后填充包含该地区城市的一些子行?有关详细信息,请参阅此图片:

http://oi48.tinypic.com/2uq0z9x.jpg

1 个答案:

答案 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焦点的备用方法

/* 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>";
   }
}