2011-06-29 77 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。