2011-06-29 8 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

    いずれかのページングを使用します。

    How can I do paging and sorting in a Perl CGI program?

    またはリクエストのn結果に空想AJAXテーブルを使用して、「ページ」

    +0

    誰かがまだすべての結果に興味があるなら、ページングは​​正しい方法です!ありがとうございました! – Ajin

    1

    間バックと第四行うための最も効率的な方法をページングするためのボタンがありますこれは、LIMIT句をSQLクエリに追加することです。例えば、

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

    と言った場合、クエリは25を超える行を返しません。 25行目以降のループを中止するPerlループにカウンタを追加することもできますが、データベースを最後に投げ捨てる行を返す余分な作業が必要になります。 LIMITを使用すると、その無駄を避けることができます。

    1

    whileループ内で印刷する代わりに、htmlをバッファ変数に格納し、ループの後に印刷します。

    あなたはこのようなものがある場合:

    while .... { 
        print $html 
    } 
    

    に変更し、それを:あなただけの行をカウントし、50をやったとき、ループを終了したい場合は

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

    それはすばらしいアイデアです!私は、ページングと組み合わせてバッファを使用します。 – Ajin

    0

    を、あなたは可能性があり以下のようなものを使用します。

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

    しかし、SQL LIMITを使用するか、またはそれはあなたのCAに動作するかどうかなどが優れていますse。

    関連する問題