Página 1 de 1

Obtener el máximo de una base de datos

NotaPublicado: 2012-07-03 09:51 @452
por aindergm
Quiero recoger el identificador más grande que haya en una base de datos, y para ello tengo una función que hace lo siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. $sth = $dbh->prepare("SELECT max(id_vector) FROM android.datamining"); 
  2. my $rv = $sth->execute; 
  3. $result = $sth->fetchrow_hashref(); 
  4. $VectorID = $result->{id_vector)}; 
  5. $sth->finish; 


Sé que no se hace así porque no lo recoge bien, pero si en la 4 línea pongo max(id_vector) en vez de solamente id_vector, el programa no funciona.

¡Gracias!

Re: Obtener el máximo de una base de datos

NotaPublicado: 2012-07-03 11:37 @525
por explorer
El problema es que Perl, al ver max(id_vector), se cree que es la llamada a una función llamada max(). Prueba a ponerlo entre comillas simples.

Aparte, veo que en la línea 4 sobra un ')'.

Lo que estás recuperando es una referencia a un hash.

Con Data::Dumper verás el contenido de ese hash:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Data::Dumper;
  2. print Dumper $result;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
y así sabrás el nombre de la clave que debes usar.

Re: Obtener el máximo de una base de datos

NotaPublicado: 2012-07-03 11:54 @538
por aindergm
¿Y cómo podría obtener solo el valor que busco, es decir solo el número?
Porque yo hago esto:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. $sth = $dbh->prepare("SELECT max(id_vector) FROM android.datamining"); 
  2. my $rv = $sth->execute; 
  3. $result = $sth->fetchrow_hashref(); 
  4. $algo=Dumper $result; 
  5. $sth->finish; 


y en $algo me guarda lo siguiente:
$VAR1 = {
'max' => 31
};


Y lo que yo quiero obtener es el número 31.

¡¡¡Gracias!!!

Re: Obtener el máximo de una base de datos

NotaPublicado: 2012-07-03 19:44 @863
por explorer
No has hecho lo que te hemos pedido, pero da igual: ya vemos que la clave del hash es 'max'. Así, para sacar el valor que quieres, lo tienes con

my $max_id_vector = $result->{'max'};

Pero se puede hacer de otra manera... en una sola línea:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $max_id_vector = $dbh->selectrow_array('SELECT max(id_vector) FROM android.datamining');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Esta línea hace todo el proceso: prepara la sentencia, la ejecuta, recupera el resultado, y lo guarda en la variable.