Как отобразить результаты вне цикла (Perl cgi) - PullRequest
1 голос
/ 29 июня 2011

У меня есть вопрос!Я создал файл cgi, который выполняет следующие действия:

  • цикл, который запрашивает базу данных
  • , пока строки найдены, создайте изображение и напечатайте его

Все отлично работает.Но теперь моя проблема: если я найду слишком много записей, я не хочу их отображать.Например: если мой результат поиска находит более 50 строк, не отображать их!

Псевдокод выглядит так:

*while row is found*    
{

 *increase counter of found rows*

 *build and print image*

}

Если я найду более 30 записей, веб-сайтбудет загружаться ужасно долго (отображаются все изображения), и вам придется слишком много прокручивать.Иногда я нахожу более 600 записей и вообще не хочу их отображать!Поэтому я должен сначала посчитать их, а затем принять решение, хочу я их видеть или нет.

Но как я могу отобразить строки после того, как я их посчитал?Потому что я могу печатать только строки внутри цикла while.

Ответы [ 4 ]

1 голос
/ 29 июня 2011

Наиболее эффективный способ сделать это - добавить предложение LIMIT в ваш запрос SQL.Если вы скажете, например,

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

, то запрос никогда не вернет больше 25 строк.Хотя вы также можете поместить в свой цикл Perl счетчик, который прерывает цикл после 25-й строки, это заставит базу данных выполнять дополнительную работу по возвращению строк, которые просто выбрасываются в конце;использование LIMIT позволяет избежать этих отходов.

1 голос
/ 29 июня 2011

Вместо печати внутри цикла while сохраните HTML-код в буферной переменной и напечатайте его после цикла.

Если у вас есть что-то вроде этого:

while .... {
   print $html
}

Измените его на:

$LIMIT = 50;
while ... {
   $buf .= $html;
   $count ++;
   last if ($count > $LIMIT;
}
print $buf if ($count <= $LIMIT);
1 голос
/ 29 июня 2011

Либо используйте подкачку:

Как я могу выполнить подкачку и сортировку в программе Perl CGI?

Или использовать причудливую таблицу AJAX для запроса n результатов, иесть кнопки для перехода назад и четвертого между страницами

0 голосов
/ 29 июня 2011

Если вы просто хотите посчитать строки и выйти из цикла после 50, вы можете использовать что-то вроде:

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

Но лучше использовать SQL LIMIT или подобноеработает в вашем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...