gpt4 book ai didi

database - Perl 在 HTML::Template 中嵌套了 TMPL_LOOP

转载 作者:搜寻专家 更新时间:2023-10-30 23:06:09 25 4
gpt4 key购买 nike

我有一个数据库,我需要从中获取一些值。我的 table 看起来像这样

column: examroll, studentname, reporttitle, marks1, marks2, marks3, total
values: 1, ABC, xyz, 5, 4, 6, 15
values: 1, ABC, pqr, 6, 4, 6, 16
values: 2, DEF, stu, 3, 7, 4, 14
values: 2, DEF, vwx, 2, 8, 5, 15
values: 2, DEF, efg, 7, 3, 7, 17

我想得到每个学生的成绩单,如下所示:

Name:ABC 
Exam Roll:1
xyz 5 4 6 15
pqr 6 4 6 16

NAME:DEF
Exam Roll:2
stu 3 7 4 14
vwx 2 8 5 15
efg 7 3 7 17

我正确地得到了 studentnameexamroll,但是在 innerloop 中,我得到了所有的值。

Exam Roll:1
xyz 5 4 6 15
pqr 6 4 6 16
stu 3 7 4 14
vwx 2 8 5 15
efg 7 3 7 17

NAME:DEF
Exam Roll:2
xyz 5 4 6 15
pqr 6 4 6 16
stu 3 7 4 14
vwx 2 8 5 15
efg 7 3 7 17

我应该在哪里更改以获得正确答案?

我在 perl 代码中完成了以下操作

my @outerloop=();
my @innerloop=();
my @blank=();

my $query1="select distinct examroll,studentname from table";
my $sth1 = $dbh->prepare($query1);
$sth1->execute();

my$query2="select reporttitle,mark1,mark2,mark3 where examroll=?";
my $sth2 = $dbh->prepare($query2);

while ($data1 = $sth1->fetchrow_hashref) {
$sth2->execute($data1->{'examroll'});
while($data2 = $sth2->fetchrow_hashref){
push(@innerloop,$data2);
}
$sth2->finish;
$data1->{'innerloop'}=\@innerloop;

push(@outerloop,$data1);
#$data1->{'innerloop'}=\@blank; #This does not work either, all data is blank
}
$sth1->finish;

现在是html部分

<TMPL_LOOP NAME=resultsloop>
Name: <TMPL_VAR NAME=studentname>
Exam Roll: <TMPL_VAR NAME=examroll>
<table>
<TMPL_LOOP NAME=innerloop>
<tr>
<td><TMPL_VAR NAME=reporttitle></td>
<td><TMPL_VAR NAME=marks1></td>
<td><TMPL_VAR NAME=marks2></td>
<td><TMPL_VAR NAME=marks3></td>
<td><TMPL_VAR NAME=total></td>
</tr>
</TMPL_LOOP>
</table>
</TMPL_LOOP>

最佳答案

您有一个名为 @innerloop 的变量用于两个滚动引用。您需要创建多个变量。

my $query1 = "select distinct examroll,studentname from table";
my $sth1 = $dbh->prepare($query1);

my $query2 = "select reporttitle,mark1,mark2,mark3 where examroll=?";
my $sth2 = $dbh->prepare($query2);

my @outerloop;
$sth1->execute();
while(my $data1 = $sth1->fetchrow_hashref) {
$sth2->execute($data1->{'examroll'});

my @innerloop; <-- New var created each
while(my $data2 = $sth2->fetchrow_hashref){ pass of the loop.
push(@innerloop,$data2);
}

$data1->{'innerloop'}=\@innerloop;

push(@outerloop,$data1);
}

如果您将变量的范围限制在您需要它们的地方,您就不会遇到这个问题。在需要之前声明变量违背了必须首先声明它们的理由。

关于database - Perl 在 HTML::Template 中嵌套了 TMPL_LOOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26419783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com