Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/400     23 Mar 2001  18:53:10
 To : Yuri Khachaturian
 Subject : Re: Помогите разобраться с циклом...
 -------------------------------------------------------------------------------- 
 
 Здравствуй, Yuri Khachaturian.
 
 В твоём письме от Fri, 23 Mar 2001 16:15:05 +0300 написано:
 
 YK> Делаем выборку из БД и пытаюсь в цикле в процессе выборки сделать еще одну
 YK> выборку.
 
 YK> Желаемый результат:
 
 YK> Группа 1 
 YK>   подгруппа 10
 YK>   подгруппа 11 
 YK>   ...
 YK> Группа 2
 YK>  подгруппа 20
 YK>  подгруппа 21
 YK>  подгруппа 22
 
 YK> и т.д.
 
 YK> В результате обработки все заканчивается на обработке "Группа 1 с
 YK> подгруппами".
 
 YK> Вот сам код:
 YK> ... подключение к БД skipped ...
 
 YK>     while ($ref = $sth->fetchrow_arrayref)
 YK>       {
 YK>        $count=$count+1;
 
 YK>         my $code = $$ref[0];
 YK>      $code =~ s///g;
 
 YK>   $_ = "$code,$$ref[1]";
 
 YK>   next unless /^(\d{1,2}),(.*)/;
 YK>   print "<a
 YK> href=\"$ENV{'SCRIPT_NAME'}?op=expand&sec=$code\">$$ref[1]</a>\n";  &get_sec(
 YK> "$code");        }    $rc = $sth->finish;    $rc  = $dbh->disconnect; } };
 
 YK> sub get_sec {
 YK>   my $req="SELECT CODE,DESCR FROM SC33 WHERE CODE LIKE \"$_[0]%\" ORDER BY
 YK> DESCR";
 
 YK>   $dbh =
 YK> DBI->connect("DBI:Sybase:server=$sqlserver;database=$database",$user,$passwd
 YK> );
 
 Кажется, эти грабли становятся традиционными... Ты глобальную $dbh меняешь.
 Естественно, внешний запрос у тебя сразу дохнет.
 
 YK>   $sth = $dbh->prepare($req);
 YK>    if (!$sth)
 YK>       {
 YK>          my $tmp=$dbh->errstr;
 YK>          print "$tmp$req";
 YK>       }
 YK>    elsif (!$sth->execute) {
 YK>          my $tmp=$sth->errstr;
 YK>          print "$tmp$req";
 YK>       }
 YK>    else {  
 YK>     my $ref;
 YK>     my $xcount;
 YK>     print "<blockquote>";
 YK>     while ($ref = $sth->fetchrow_arrayref)
 YK>       {
 YK>        $xcount=$xcount+1;
 
 YK>         my $code = $$ref[0];
 YK>      $code =~ s///g;
 
 YK>   $_ = "$code,$$ref[1]";
 YK>   next unless /^(\d{1,4}),(.*)/;
 
 YK>   if (!/^(\d{1,2}),(.*)/) {
 YK>    if ($$ref[1] eq "___" ) { $$ref[1] = "пЮГМHЕ"; }
 YK>    elsif ($$ref[1] eq "____________" ) { $$ref[1] = "пЮГМHЕ"; }
 YK>     print "<a
 YK> href=\"$ENV{'SCRIPT_NAME'}?op=goods&sec=$code\">$$ref[1]</a><br>";    }     
 YK> }    print "</blockquote>";    $rc = $sth->finish;    $rc  =
 YK> $dbh->disconnect; } };
 А нормальные люди, дабы не тратить зря процессор на дцать коннектов к базе,
 изучают таки SQL и получают требуемые данные одним запросом. В некотороых
 случаях может иметь смысл двумя.
 
 -- 
 Artem Chuprina                            E-mail: ran@ran.pp.ru
 Programmer                                  FIDO: 2:5020/371.32
 Memonet Ltd.                             Phone: +7-095-284-1356
 --- ifmail v.2.15dev5
  * Origin: NTV Internet (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Помогите разобраться с циклом...   Artem Chuprina   23 Mar 2001 18:53:10 
Архивное /ru.perl/164836a75d45c.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional