数据库中的多个查询取决于没有循环的参数

时间:2014-07-31 18:27:55

标签: mysql sql perl postgresql

我有一个PostgreSQL数据库和一个像这样的Perl脚本

sub reassign_minions {
    my $self = shift;
    my @users = $self->get_userids_of_minions();

    my $sth = $self->dbh->prepare(qq{update users set reports_to = ? where userid = ?});
    $sth->execute($self->reports_to, $user);
    $sth->finish;
}

@users假设包含多个用户ID(整数)的数组。对于它返回的每个用户ID,我想用变量更新reports_to列,但我不确定如何查询多个变量。

如果它只是一个就很容易,因为我可以将变量参数设置为$userid之类的东西,就像我上面所说的那样。但由于可以传入的ID数量不固定,我不知道该怎么做。

我还被告知有一种方法可以在不使用循环的情况下执行此操作,因为我最初有一个for循环。

2 个答案:

答案 0 :(得分:4)

IN与占位符一起使用

sub reassign_minions {
    my $self = shift;
    my @users = $self->get_userids_of_minions();

    my $in = join ',', ('?') x @users;
    my $sth = $self->dbh->prepare(qq{update users set reports_to = ? where userid IN ($in)});
    $sth->execute($self->reports_to, @users) or die $self->dbh->errstr;;
    $sth->finish;
}

答案 1 :(得分:-1)

试试这个

my $sth = $self->dbh>prepare(qq{update users set reports_to = ? where userid = ?});
foreach my $user(@users) {
    $sth->execute($self->reports_to, $user);
}
$sth->finish;