如何使用perl cgi和mysql在状态匹配时显示在id和only id之间?

nzrxty8p  于 2022-12-13  发布在  Perl
关注(0)|答案(1)|浏览(102)

我刚刚开始使用Perl CGI和MySQL数据库与html模板。我有一个表称为“保留”和模板称为显示。html。现在我显示最大的reserve_id。但如何显示在之间的id和只有id当reserve_status是3。
1.表数据[预留]:

reserve_id  reserve_status
34001             2
34002             2
34003             3
34004             3
35001             3
35002             3
35003             2
36000             3
36000             2
37000             3
37001             3
37002             2
40000             1
40001             3
40002             1

1.文件[教科书公用学生]:

sub GetReceiptNumber(){
    my $self = shift;
    my $status = shift;
    my $dbh = $self->{'dbh'};

    my $sql = "select *, MAX(reserve_id) as id from reserve where reserve_status = ? ";
    my @keys = ('reserve_status');
    return $dbh->selectall_hashref($sql, @keys, undef, $status);
}

1.文件[索引.cgi]:

use TextBookCommonStudent;
use Data::Dumper;
use CGI;

my $TextBookCommonStudent = TextBookCommonStudent->_new()->DBConnect();

get '/Show' => sub {
    my $self = shift;
    my @breadcrumb = ('Show');

    my $ReceiptNumber = $TextBookCommonStudent->GetReceiptNumber('3');
    my $number = $ReceiptNumber->{'3'}->{'id'};
    $self->stash('ReceiptNumber'=> $number);

    $self->stash('breadcrumb'=> \@breadcrumb);
    $self->render('Show');
};

1.模板[Show.html]:

<%
    use Data::Dumper;
    my $ReceiptNumber = stash('ReceiptNumber');
%>
<div class="row">
    reserve numbers: <%= $ReceiptNumber %>
</div>

输出当前显示:

reserve numbers: 40001

但我想通过以下几点来说明:

reserve numbers: 34003~35002,36000,37001~37002,40001

我怎样用perl cgi显示上面的数据?

92dk7w1h

92dk7w1h1#

我刚开始使用Perl CGI
你不知道在2022年读到这篇文章有多令人沮丧。请阅读CGI::Alternatives并重新考虑。
请告诉我们您使用的是什么Perl模块。我无法识别您模板中的<%= $ReceiptNumber %>语法。是什么提供了您在CGI代码中使用的get => '/Show' { ... }语法?它不是标准的CGI功能。
但是,最主要的问题似乎是需要更改SQL。您当前的SQL是:

select *, MAX(reserve_id)
from   reserve
where  reserve_status = ?

这将返回三列,其中第三列将始终是相同的值。这似乎是一种相当奇怪的查询所需数据的方式-特别是在代码中,您忽略了大多数数据,而只是从数据结构中提取了一个receipt_id
我刚刚注意到,您使用了selectall_hashref(),并将其作为键列。因此,您为每个状态为3的保留选择了一行。但是,由于DBI在处理结果集时,每次都会覆盖散列中的相同值,因此散列中最终只会有一个键/值对。
总而言之,你的代码看起来相当混乱,而且如果你不知道你要做什么和你要使用的工具,你的问题很难回答。

相关问题