1

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

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

我得到studentname并且examroll正确,但是在 中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>
4

1 回答 1

2

您有一个@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);
}

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

于 2014-10-17T07:22:23.703 回答