Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Otros Temas » Bases de Datos » Leer columnas al mostrar registros  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 9 mensajes ] 
 
Nota 2011-06-12 20:22 @890

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Leer columnas al mostrar registros
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:

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
id nombre #columnas
1  jose
2  test


El código que tengo es este

Syntax: [ Download ] [ Hide ]
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.  


¿ Alguien me podría ayudar ?


Nota 2011-06-13 03:33 @189
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10261
Re: Leer columnas al mostrar registros
Solo tienes que cambiar el '*' por los nombres de las campos que quieres recuperar... es cuestión de lenguaje SQL.

_________________
JF^D Perl programming


Nota 2011-06-13 09:01 @417

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Re: Leer columnas al mostrar registros
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):

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
1  jose
2  test
 


Pero no me dice el nombre de las columnas leídas. Perdón si no me exprese bien o no entendí nada.


Nota 2011-06-13 09:39 @444
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10261
Re: Leer columnas al mostrar registros
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


Nota 2011-06-13 11:31 @522

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Re: Leer columnas al mostrar registros
Gracias por la respuesta, explorer, era lo que necesitaba, pero ahora
estoy peor porque no puedo calcular cómo hacer lo que quiero.

Syntax: [ Download ] [ Hide ]
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.  


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 ?


Nota 2011-06-13 15:00 @666
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10261
Re: Leer columnas al mostrar registros
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


Nota 2011-06-13 17:38 @776

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Re: Leer columnas al mostrar registros
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.


Nota 2011-06-13 17:49 @784
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10261
Re: Leer columnas al mostrar registros  RESUELTO
¿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


Nota 2011-06-13 18:14 @801

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Re: Leer columnas al mostrar registros
Sí estoy muy seguro, explorer; con esto ya está. Gracias, explorer.


Responder al tema  [ 9 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO