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

如何用Perl CGI+MySQL按状态匹配展示连续/单个reserve_id

实现Perl CGI中连续reserve_id的分组展示需求

我刚开始用Perl CGI、MySQL和HTML模板,现有reserve表和Show.html模板。当前代码只能展示reserve_status=3的最大reserve_id(比如输出40001),现在需要把符合状态的reserve_id按规则展示:连续ID用~连接,单个ID直接显示,示例输出为34003~35002,36000,37001~37002,40001。以下是具体修改方案:

1. 调整MySQL查询逻辑

将原来取最大ID的查询,改为按reserve_id升序取出所有reserve_status=3的记录,SQL语句替换为:

SELECT reserve_id FROM reserve WHERE reserve_status = 3 ORDER BY reserve_id ASC;

该查询能获取所有符合条件的ID并按顺序排列,为后续连续ID分组处理提供基础。

2. 修改TextBookCommonStudent的GetReceiptNumber子例程

替换原有的取最大ID逻辑,实现连续ID的分组拼接:

sub GetReceiptNumber {
    my ($dbh) = @_;
    my @ids;
    # 查询所有符合条件的ID
    my $sth = $dbh->prepare("SELECT reserve_id FROM reserve WHERE reserve_status = 3 ORDER BY reserve_id ASC");
    $sth->execute();
    while (my $row = $sth->fetchrow_hashref) {
        push @ids, $row->{reserve_id};
    }
    $sth->finish();

    return '' unless @ids; # 无数据时返回空串

    my @result;
    my $start = $ids[0];
    my $prev = $ids[0];

    # 遍历ID,分组连续序列
    for my $id (@ids[1..$#ids]) {
        if ($id == $prev + 1) {
            $prev = $id;
        } else {
            # 结束当前连续序列
            push @result, $start == $prev ? $start : "$start~$prev";
            $start = $id;
            $prev = $id;
        }
    }
    # 处理最后一组序列
    push @result, $start == $prev ? $start : "$start~$prev";

    # 用逗号拼接所有分组结果
    return join(',', @result);
}

该子例程会自动识别连续ID段,将其合并为起始~结束格式,单个ID直接保留,最终返回符合要求的字符串。

3. 修改index.cgi代码

直接调用修改后的子例程获取处理好的ID字符串,传入模板进行渲染:

# 调用子例程获取格式化后的ID字符串
my $receipt_numbers = TextBookCommonStudent::GetReceiptNumber($dbh);
# 将变量传入模板(以HTML::Template为例,根据你使用的模板引擎调整)
my $template = HTML::Template->new(filename => 'Show.html');
$template->param(RECEIPT_NUMBERS => $receipt_numbers);
print $template->output();

确保模板参数名与后续模板中的变量名保持一致。

4. 修改Show.html模板

替换原有的单ID展示代码,添加格式化ID的展示位置:

<!-- 替换原展示最大ID的代码 -->
<div>
    符合条件的预约ID:<span><TMPL_VAR NAME="RECEIPT_NUMBERS"></span>
</div>

根据你的模板结构调整标签样式,确保TMPL_VAR的名称与CGI中传入的参数名(RECEIPT_NUMBERS)匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:21:01