database - example - dbi mysql perl
¿Cómo puedo obtener un valor de recuento único de una base de datos con DBI? (3)
Bastante fácil de hacer en una línea sin variables adicionales:
$count = $dbh->selectrow_array(''SELECT count(*) FROM table WHERE...'', undef, @params);
El siguiente código parece ser demasiado para obtener un valor de recuento único. ¿Existe una forma mejor y recomendada de obtener un solo valor de COUNT utilizando un DBI simple?
sub get_count {
my $sth = $dbh->prepare("SELECT COUNT(*) FROM table WHERE...");
$sth->execute( @params );
my $($count) = $sth->fetchrow_array;
$sth->finish;
return $count;
}
Esto es más corto, pero todavía tengo dos afirmaciones.
sub get_count_2 {
my $ar = $dbh->selectall_arrayref("SELECT ...", undef, @params)
return $ar->[0][0];
}
No conozco a Perl, pero si la sintaxis es lógica, creo que esto funcionaría en base a tu segundo ejemplo:
sub get_count {
return $dbh->selectall_arrayref("SELECT ...", undef, @params)->[0][0];
}
Probablemente yo no haría esto por mí mismo, pero siempre podría convertirlo en una nueva función de nivel superior del objeto DBH que está utilizando:
ADVERTENCIA: el código no probado sigue!
sub DBD::SQLite::db::count
{
my($dbh, $table, $where) = @_;
my($stmt) = "SELECT COUNT(*) FROM $table";
$stmt .= " WHERE $where" if $where;
my($count) = $dbh->selectrow_array($stmt);
return $count;
}
y luego llámalo así:
my($cnt) = $dbh->count(''Employee'', ''year_hired < 2000'');
Además de contaminar un espacio de nombres que no es tuyo, también tendrías que escribir esto para cada controlador de DB que utilices, aunque estoy seguro de que podrías trabajar en algo que te permita construir y evaluar un código para auto-configurar esto para un determinado Objeto DBH.