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

PHP结合MySQL实现按5年分组的动态select筛选下拉框开发问题

实现方案

1 修正SQL查询

你原SQL中GROUP BY TAC_Nome的逻辑不符合获取年份列表的需求,建议先查询所有去重后升序排列的年份:

SELECT DISTINCT MPU_Ano `Year`
FROM view_mpacompanhamentogeral
ORDER BY `Year` ASC

如果需要同时保留原业务数据的查询,也可以后续从全量查询结果中单独提取年份字段去重排序,不需要额外做一次查询。

2 PHP处理生成年份区间

以下代码默认按你示例的6年为一个区间生成选项,你可以自行调整步长参数修改区间长度:

PDO版本示例

<?php
// 数据库连接逻辑省略,假设已初始化PDO实例$pdo
$stmt = $pdo->query("SELECT DISTINCT MPU_Ano `Year` FROM view_mpacompanhamentogeral ORDER BY `Year` ASC");
$years = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);

$intervals = [];
if (!empty($years)) {
    $minYear = min($years);
    $maxYear = max($years);
    $step = 6; // 区间长度,可自行调整
    for ($start = $minYear; $start <= $maxYear; $start += $step) {
        $end = min($start + $step - 1, $maxYear);
        $intervals[] = [
            'value' => $start . '-' . $end,
            'text' => $start . '-' . $end
        ];
    }
}
?>

MySQLi版本示例

<?php
// 数据库连接逻辑省略,假设已初始化MySQLi连接实例$conn
$result = mysqli_query($conn, "SELECT DISTINCT MPU_Ano `Year` FROM view_mpacompanhamentogeral ORDER BY `Year` ASC");
$years = [];
while ($row = mysqli_fetch_assoc($result)) {
    $years[] = $row['Year'];
}

// 生成区间逻辑和PDO版本完全一致,此处省略重复代码
?>

3 渲染下拉选择框

<select id="selectFilterByYears">
    <?php foreach ($intervals as $interval): ?>
    <option value="<?php echo htmlspecialchars($interval['value']); ?>">
        <?php echo htmlspecialchars($interval['text']); ?>
    </option>
    <?php endforeach; ?>
</select>

如果你的区间规则不是按固定步长生成,是固定的几个区间,也可以直接定义$intervals数组,不用动态计算,仅校验每个区间内是否有对应数据再决定是否展示即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:39:02