Consulta a MySql
![Nota Nota](https://perlenespanol.com/foro/styles/prosilver/imageset/icon_post_target.gif)
¡¡Hola a todos!!! Estoy haciendo un programa el cual accede a la base de datos. Ya he hecho unos cuantos y todos me han funcionado sin ninguna pega pero en éste algo falla... Resulta que la consulta que está marcada con asteriscos (*****), a la hora de ejecutarla en la consola me devuelve 6 resultados, pero a la hora de hacerlo con Perl solo me devuelve el primer resultado de los que me devuelve haciendo la consulta manualmente.
Bueno, si alguien tiene alguna idea de cómo lo puedo hacer, por favor, que me ayude, porque ¡¡¡estoy ya desesperada!!! ¡¡¡¡Gracias por adelantado!!!!
Using perl Syntax Highlighting
- #!/usr/bin/perl -w
- #nos conectamos con la base de datos para luego poder acceder a eso documentos
- use DBI;
- $db="documentos";
- $host="localhost";
- $port="3306"; # puerto mysql
- $usuario="root";
- $pw="database";
- #realizamos la conexion a la base de datos
- $connectionInfo="DBI:mysql:database=$db;$host;$port";
- $conexion=DBI->connect($connectionInfo,$usuario,$pw);
- #tendremos que ordenar los articulos por autor y haremos tantos grupos como autores haya,los cogeremos de autor_escribe, para ello tendremos q coger el codigo del autor y con el ir a la tabla de autores y acceder al nombre asignado a ese cogido, ese nombre sera el nombre del grupo , y para asignarle articulos cogeremos el codigo_articulo de la tabla autor_escribe e iremos a la tabla articulos y con ese codigo cogeremos el link y el titulo relacionado.
- open(RESULTADO, ">jerarquia_autor.txt");
- $count="SELECT count(distinct codigo_autor) FROM autores";
- $consulta=$conexion->prepare($count);
- $consulta->execute();
- @data = $consulta->fetchrow_array(); #nos deja en el array el número de autores que hay
- $consulta->finish();
- $num_autores="$data[0]";
- # la tabla autores tiene dos campos: codigo_autor y nombre.
- my ($titulo,$link);
- $cont="1";
- while ($cont le $num_autores){
- $query="SELECT nombre FROM autores where codigo_autor=$cont";
- $consulta=$conexion->prepare($query);
- $consulta->execute();
- @data = $consulta->fetchrow_array();#nos deja en el array el nombre del autor que tiene el código indicado en la consulta
- $consulta->finish();
- print RESULTADO $data[0]."\n"; # escribe en el fichero el nombre del autor, que coincidirá con el nombre de cada grupo
- #ahora quiero que me coja todos los códigos de los artículos que escribe ese autor, para eso voy a la tabla autor_escribe que tiene dos campos (cod_articulo y cod_autor) y hago la siguiente consulta
- $query="SELECT cod_articulo FROM autor_escribe where cod_autor=$cont"; #**********ESA CONSULTA ME DA MAL********************
- $consulta=$conexion->prepare($query);
- $consulta->execute();
- @articulos = $consulta->fetchrow_array(); ####solo tienen el primer artículo en vez de todos(en la consola con la misma query devuelve todos)
- $consulta->finish();
- # por cada articulo iría a la tabla artículos con el cod_articulo y cogería los datos que me interesan
- foreach $articulo (@articulos){
- $query="SELECT identificativo,tittle FROM articulos where codigo=$articulo";
- $consulta=$conexion->prepare($query);
- $consulta->execute();
- @data = $consulta->fetchrow_array();#nos deja en el array los datos del resultado de la consulta
- $consulta->finish();
- $titulo="$data[0]";
- $link="$data[1]";
- print RESULTADO "\t".$titulo."\n";
- print RESULTADO "\t"."\t".$link."\n";
- }
- $cont++;
- }
- print RESULTADO " Artículos sin autor conocido";
- $query="SELECT cod_articulo FROM autor_escribe where cod_autor=0";
- $consulta=$conexion->prepare($query);
- $consulta->execute();
- @articulos = $consulta->fetchrow_array(); #nos deja en el array los datos del resultado de la consulta
- $consulta->finish();
- foreach $articulo (@articulos){
- $query="SELECT identificativo,tittle FROM articulos where codigo=$articulo";
- $consulta=$conexion->prepare($query);
- $consulta->execute();
- @data = $consulta->fetchrow_array();#nos deja en el array los datos del resultado de la consulta
- $consulta->finish();
- $titulo="$data[0]";
- $link="$data[1]";
- print RESULTADO "\t".$titulo."\n";
- print RESULTADO "\t"."\t".$link."\n";
- }
- close(RESULTADO);
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Bueno, si alguien tiene alguna idea de cómo lo puedo hacer, por favor, que me ayude, porque ¡¡¡estoy ya desesperada!!! ¡¡¡¡Gracias por adelantado!!!!