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

如何实现先按Make列分组再按Model列前缀分组的车辆数据统计?

问题描述

我有一个本地汽车数据库,需要在页面表格里实现层级化数据展示:

  1. 初始展示各**品牌(Make)**对应的车辆总数
  2. 点击某个品牌后,展示该品牌下按车型(Model)开头字符串分组的车辆数量

数据库表结构如下:

MakeModelYearFuelEngine_cc
MarutiBrezza ZDI2019Diesel1199
MarutiBrezza VXi2020Petrol1499
MarutiBrezza Lxi2021Petrol1499
MarutiBaleno MT2019Petrol1199
HyundaiCreta2020Petrol1199
HyundaiAura2021Petrol1199

当前使用的错误PHP代码:

$mysql = "SELECT make, model FROM cars car_make WHERE make = (SELECT model FROM cars WHERE make like = cars_make.make) GROUP BY make, model";
$myresult = mysqli_query($connect, $mysql);
echo var_dump($myresult);
解决方案

1. 第一步:获取各品牌车辆总数

先执行SQL统计每个品牌的总车辆数,再用PHP渲染成可点击的表格:

SQL语句

SELECT make, COUNT(*) AS total_cars 
FROM cars 
GROUP BY make 
ORDER BY make;

PHP代码示例

// 假设$connect已完成数据库连接初始化
$brandSql = "SELECT make, COUNT(*) AS total_cars FROM cars GROUP BY make ORDER BY make";
$brandResult = mysqli_query($connect, $brandSql);

// 渲染品牌统计表格
echo "<table border='1'>";
echo "<tr><th>品牌</th><th>车辆总数</th></tr>";
while ($row = mysqli_fetch_assoc($brandResult)) {
    // 点击品牌时传递参数到当前页面
    echo "<tr>
            <td><a href='?make=" . urlencode($row['make']) . "'>" . htmlspecialchars($row['make']) . "</a></td>
            <td>" . $row['total_cars'] . "</td>
          </tr>";
}
echo "</table>";

2. 第二步:点击品牌后展示车型分组统计

当页面接收到make参数时,执行SQL提取该品牌下的车型前缀并统计数量:

SQL语句(提取Model空格前的前缀,如Brezza ZDI取Brezza)

SELECT 
    SUBSTRING_INDEX(model, ' ', 1) AS model_prefix,
    COUNT(*) AS model_count
FROM cars 
WHERE make = ?
GROUP BY model_prefix 
ORDER BY model_prefix;

PHP代码示例

// 检查是否有品牌参数传入
if (isset($_GET['make']) && !empty($_GET['make'])) {
    $selectedMake = $_GET['make'];
    
    // 使用预处理语句防止SQL注入
    $modelSql = "SELECT SUBSTRING_INDEX(model, ' ', 1) AS model_prefix, COUNT(*) AS model_count FROM cars WHERE make = ? GROUP BY model_prefix ORDER BY model_prefix";
    $stmt = mysqli_prepare($connect, $modelSql);
    mysqli_stmt_bind_param($stmt, "s", $selectedMake);
    mysqli_stmt_execute($stmt);
    $modelResult = mysqli_stmt_get_result($stmt);
    
    // 渲染车型分组统计表格
    echo "<h3>" . htmlspecialchars($selectedMake) . " 车型分组统计</h3>";
    echo "<table border='1'>";
    echo "<tr><th>车型前缀</th><th>车辆数量</th></tr>";
    while ($row = mysqli_fetch_assoc($modelResult)) {
        echo "<tr>
                <td>" . htmlspecialchars($row['model_prefix']) . "</td>
                <td>" . $row['model_count'] . "</td>
              </tr>";
    }
    echo "</table>";
    
    // 返回品牌列表的链接
    echo "<p><a href='?'>返回品牌列表</a></p>";
}

关键说明

  • 原SQL存在语法错误(like =格式错误、子查询逻辑混乱),上述方案重新梳理了业务逻辑
  • 使用预处理语句绑定参数,避免SQL注入风险
  • 车型前缀提取逻辑可根据实际需求调整,比如车型前缀规则不是空格分隔,可修改SUBSTRING_INDEX的分隔符参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:55:18