You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MySQL统计数整合到PHP数组并按州-城市-门店数格式展示

问题分析与解决方案

我看出来你的核心问题了——你的PHP代码既跳过了一半数据,又没把城市对应的门店数量(SQL返回的cnt字段)和城市名关联存储,导致后续无法正确展示城市(数量)的格式。

问题根源拆解

  1. 多余的mysqli_fetch_assoc调用:你在while循环里刚拿到当前行的$row,又调用了$values = mysqli_fetch_assoc($result);,这会把结果集指针直接移到下一行,导致你丢失了一半的数据,而且$numStores拿到的是下一行的门店数,完全不匹配当前城市。
  2. 未关联城市与数量:你的$rows[$row['state']][] = $city;只存储了城市名,没有把对应的cnt值一起存进去,后续遍历自然拿不到每个城市的门店数。

修正后的完整代码

首先保留你正确的SQL语句,然后调整PHP逻辑:

$sql ="SELECT DISTINCT city, state, stateAbv, COUNT(CASE WHEN open = 'Y' THEN 1 END) AS cnt FROM $tbl_name WHERE open = 'Y' GROUP BY city, state, stateAbv ORDER BY state;";

$result = mysqli_query($conn,$sql);
$num_columns = 1;
$rows = array();

// 修正循环:直接存储城市和对应的门店数
while($row = mysqli_fetch_assoc($result)){
    $state = $row['state'];
    $city = $row['city'];
    $numStores = $row['cnt']; // 直接从当前行获取门店数,无需额外fetch

    if(!isset($rows[$state])){
        $rows[$state] = array();
    }
    // 将城市和数量以关联数组形式存入,方便后续调用
    $rows[$state][] = [
        'city' => $city,
        'cnt' => $numStores
    ];
}

// 按预期格式输出
foreach($rows as $state => $cityList){
    echo '<b>'. $state .'</b>';
    // 如果你需要按列拆分城市(比如原代码的$num_columns)
    $cityChunks = array_chunk($cityList, $num_columns);
    foreach($cityChunks as $chunk){
        foreach($chunk as $item){
            echo " {$item['city']}({$item['cnt']})";
        }
    }
    echo '<br>'; // 每个州结束后换行,可根据需求调整
}

关键改动说明

  1. 移除多余的fetch操作:直接从当前$row中获取cnt,避免数据丢失和匹配错误。
  2. 关联存储城市与数量:将每个城市的信息以['city' => 'xxx', 'cnt' => x]的关联数组形式存入$rows,确保城市和门店数始终绑定。
  3. 调整输出逻辑:遍历每个州的城市列表时,直接从关联数组中取出城市名和数量,拼接成你需要的城市(数量)格式。

修正后,你的$rows数组结构会变成:

Array ( 
    [Alabama] => Array ( 
        [0] => Array ( [city] => Mobile [cnt] => 2 ) 
        [1] => Array ( [city] => Auburn [cnt] => 4 ) 
        [2] => Array ( [city] => Hoover [cnt] => 3 ) 
    ) 
)

最终会输出符合你预期的格式:

<b>Alabama</b> Mobile(2) Auburn(4) Hoover(3)

内容的提问来源于stack exchange,提问作者kelsheikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:36:24