|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/164836a75d45c.html, оценка из 5, голосов 10
|