2011-06-29 108 views
1

我有问题!我建立这是做下面的一个cgi文件:如何显示循环结果(Perl cgi)

  • 一个循环querys数据库
  • 而行发现,构建一个图像并打印

,一切工作正常。但现在我的问题:如果我发现太多的条目,我不想显示它们。例如:如果我的searchresult发现超过50行,请不要显示它们!

伪代码如下所示:

*while row is found*  
{ 

*increase counter of found rows* 

*build and print image* 

} 

如果我找到超过30个条目,网站将加载相当长的(显示所有图片),你必须滚动太多。有时候我会发现超过600个条目,我根本不想展示它们!所以我必须先数数,然后做出决定,如果我想看到它们。

但我怎么能显示的行之后,我数了?因为我只能打印while循环内的行。

回答

1

的最有效的方式做到之间这将是为您的SQL查询添加LIMIT子句。如果你说,例如,

SELECT foo, bar, baz FROM my_table WHERE foo = 1 LIMIT 25; 

然后查询将永远不会返回超过25行。虽然你也可以在你的Perl循环中放置一个计数器来放弃第25行后的循环,这可以使数据库完成额外的工作,返回最后抛弃的行;使用LIMIT可避免浪费。

1

而是while循环里面印刷的,你的HTML保存到缓冲区变量,并在循环之后打印出来。

如果你有这样的事情:

while .... { 
    print $html 
} 

将其更改为:

$LIMIT = 50; 
while ... { 
    $buf .= $html; 
    $count ++; 
    last if ($count > $LIMIT; 
} 
print $buf if ($count <= $LIMIT); 
+0

这是一个美妙的想法!我将结合分页使用缓冲区。 – Ajin

0

如果你只是想数行和退出循环,当你已经做了50,你可以使用类似:

my $count = 0; 
while(*row is found* && $count++ < 50) 
{ 
    *stuff* 
} 

但使用SQL LIMIT或类似的是更好,如果它在你的CA SE。