VMX::Common::updateall_hashref()

databind
vitalif 2009-06-23 11:22:29 +00:00 committed by Vitaliy Filippov
parent e35607dd3e
commit b1c2e3f20a
1 changed files with 13 additions and 0 deletions

View File

@ -331,6 +331,19 @@ sub updaterow_hashref
return $dbh->do($sql, {}, @bind);
}
# Множественный UPDATE - обновить много строк @%$rows,
# но только по первичному ключу (каждая строка должна содержать его значение!)
sub updateall_hashref
{
my ($dbh, $table, $rows) = @_;
my @f = keys %{$rows->[0]};
my $sql = "INSERT INTO `$table` (`".join("`,`",@f)."`) VALUES ".
join(",",("(".(join(",", ("?") x scalar(@f))).")") x scalar(@$rows)).
" ON DUPLICATE KEY UPDATE ".join(',', map { "`$_`=VALUES(`$_`)" } @f);
my @bind = map { @$_{@f} } @$rows;
return $dbh->do($sql, {}, @bind);
}
# Удалить все строки, у которых значения полей с названиями ключей %$key
# равны значениям %$key
sub deleteall_hashref