【问题标题】:Join two MySQL tables and group result with php加入两个 MySQL 表并使用 php 对结果进行分组
【发布时间】:2012-05-28 03:15:32
【问题描述】:

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

$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 的表,并从 city_selection table 中的新列 "region_id" 添加了一个 Foreign key 到新表中的 region_id。

我现在正在努力使用 PHP 在一个漂亮的 html 表格中呈现这些数据。

是否可以先用 region_name 填充一个表格行,然后再填充一些包含该地区城市的子行?详情请看这张图:

【问题讨论】:

    标签: php mysql html-table


    【解决方案1】:

    你只需要做一点预处理:

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

    【讨论】:

    • 感谢您的回答,但我不确定我是否关注您。这不是我习惯的那种代码。我无法回显任何数据。您介意为我提供更多代码或解释吗?提前致谢。
    • @David 编辑了我的答案以回答您的具体评论问题。
    • 谢谢。但是,仍然没有得到任何数据回显。但至少我有一些工作要做..
    • 不。甚至没有 html 表。如果我插入代码,页面甚至不会处理:(
    • 我没有收到错误消息。如果我查看源代码,直到我放置此代码的
      的所有内容都在浏览器中可见。然后它停止。如果我取出这条线,但至少它正在处理。 $regions[$row['region_name']] = explode(',' $row['city_name']);
    猜你喜欢
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 2011-12-17
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多