• Publicidad

Leer columnas al mostrar registros

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Leer columnas al mostrar registros

Notapor BigBear » 2011-06-12 20:22 @890

Hola, ando algo confundido, ando queriendo ejecutar una sentencia para después leer todos los registros con el nombre de la columna, un ejemplo sería:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
id nombre #columnas
1  jose
2  test
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


El código que tengo es este

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use DBI;
  2. my $n = DBI->connect("dbi:mysql:noticias:localhost:3306","root","123");
  3.  
  4. $sth = $n->prepare("select * from articulos");
  5. $sth->execute();
  6.  
  7. while (@a = $sth->fetchrow_array()) {
  8. print @a;
  9. }
  10.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿ Alguien me podría ayudar ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Leer columnas al mostrar registros

Notapor explorer » 2011-06-13 03:33 @189

Solo tienes que cambiar el '*' por los nombres de las campos que quieres recuperar... es cuestión de lenguaje SQL.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Leer columnas al mostrar registros

Notapor BigBear » 2011-06-13 09:01 @417

No es lo que quería, lo que yo necesito es que ante cualquier sentencia con comodín o sin el , el script muestre el nombre de columna al mostrar el registro.

Tiene que ser como en el ejemplo porque si hago como vos me decís, el script me tiraría (select id,nombre from articulos):

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1  jose
2  test
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Pero no me dice el nombre de las columnas leídas. Perdón si no me exprese bien o no entendí nada.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Leer columnas al mostrar registros

Notapor explorer » 2011-06-13 09:39 @444

Disculpas. No entendí que lo que querías era obtener el nombre de las columnas.

Según la documentación de DBI, lo puedes obtener así, después de la línea 4:

print "Nombres de columnas: @{ $sth->{NAME} } \n";

$sth->{NAME} contiene una referencia a un array, en que cada elemento de ese array contiene el nombre de cada columna.

Si quieres acceder a una sola columna, puedes escribir esto:

print "Primera columna: $sth->{NAME}->[0] \n";

Más información en la sección Statement Handle Attributes del manual del DBI.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Leer columnas al mostrar registros

Notapor BigBear » 2011-06-13 11:31 @522

Gracias por la respuesta, explorer, era lo que necesitaba, pero ahora
estoy peor porque no puedo calcular cómo hacer lo que quiero.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use DBI;
  2. my $n = DBI->connect("dbi:mysql:noticias:localhost:3306","root","123");
  3.  
  4. $sth = $n->prepare("select * from articulos");
  5. $sth->execute();
  6.  
  7. my $total = $sth->rows();
  8. my $inicio_rows = 0;
  9. my $inicio_col = 0;
  10. my @columnas = @{$sth->{NAME}};
  11. my $total_columnas = int(@{$sth->{NAME}});
  12. $total_columnas--;
  13. $total--;
  14. for my $cargar_columnas(0..$total_columnas) {
  15. print "\n\n[+] Columna : ".$columnas[$cargar_columnas]."\n\n";
  16. #???
  17. }
  18.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Logro marcar bien las columnas pero cuando quiero mostrar los valores ordenados por columna me falla el cálculo al querer usar la función fetchrow_array().

¿ Me podrías explicar cómo debería hacerlo ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Leer columnas al mostrar registros

Notapor explorer » 2011-06-13 15:00 @666

Es muy fácil, solo tienes que modificar la sentencia SQL con una cláusula ORDER BY, para que los resultados salgan ordenados por el campo que tu quieras.

Otra opción sería recuperar todos los datos, meterlos en una estructura compleja de Perl (por ejemplo, un array de arrays) y luego usar sort() para ordenarlos.

Es más fácil que esto lo haga el motor de base de datos, desde luego.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Leer columnas al mostrar registros

Notapor BigBear » 2011-06-13 17:38 @776

Gracias por la respuesta, explorer, pero necesito hacer lo que dije sin interferir en las sentencias SQL.
Encontré una forma de hacerlo (muy desordenado) pero me gustaría que me explicaras cómo puedo hacer el array de array que mencionaste.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Leer columnas al mostrar registros

Notapor explorer » 2011-06-13 17:49 @784

¿Estás seguro de lo que dices? ¿No puedes cambiar

$sth = $n->prepare("select * from articulos");

por

$sth = $n->prepare("select * from articulos order by 'id'");

???

Para hacer el array solo tienes que ejecutar una sentencia

$array_ref = $n->selectall_arrayref("select * from articulos order by 'id'");

Esto devuelve una referencia a un array que contiene referencias a arrays, cada uno de los cuales es un elemento de cada fila del resultado. Y así tienes todo el resultado con solo una instrucción. (Una matriz de dos dimensiones.)

Más información en DBI, buscando por selectall_arrayref.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Leer columnas al mostrar registros

Notapor BigBear » 2011-06-13 18:14 @801

Sí estoy muy seguro, explorer; con esto ya está. Gracias, explorer.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados