PERL прерывается цикл
Беру данные из одной таблицы. Там 10 записей получается. Далее перерабатываю одно значение в каждой строке и это значение подставляю в новый запрос. Но срабатывает только первая строка. Остальные игнорируются. Т.е. мне нужно получиться все $item c данными из второй таблцы внутри. Но получается только один $item
my $sth = $dbh->prepare("SELECT * FROM calcdone ORDER BY sort");
my $rvs = $sth->execute();
while (my $item = $sth->fetchrow_hashref) {
my @newNum = $item->{sel} =~ /\d+/g;
my $newsel =join(',', @newNum);
$sth = $dbh->prepare("SELECT * FROM catn WHERE id IN ($newsel)");
$rvs = $sth->execute();
while ($pos = $sth->fetchrow_hashref)
{
push(@pos, $pos);
}
$item->{pos}=\@pos;
push(@items, $item);
}
Причем если убрать второй блок запроса в БД - нормально получаются 10 $item
Ответы (1 шт):
Автор решения: Infarch
→ Ссылка
Скорее всего проблема в том, что вы переписываете $sth в теле цикла, когда готовите саб-запрос. Попробуйте так:
my $sth = $dbh->prepare("SELECT * FROM calcdone ORDER BY sort");
$sth->execute();
while (my $item = $sth->fetchrow_hashref) {
my @newNum = $item->{sel} =~ /\d+/g;
my $newsel =join(',', @newNum);
my $sth2 = $dbh->prepare("SELECT * FROM catn WHERE id IN ($newsel)");
$sth2->execute();
while ($pos = $sth2->fetchrow_hashref){
push(@pos, $pos);
}
$item->{pos}=\@pos;
push(@items, $item);
}