Я пытаюсь извлечь информацию из базы данных MySQL, которой затем буду манипулировать в perl:
use strict;
use DBI;
my $dbh_m= DBI->connect("dbi:mysql:Populationdb","root","LisaUni")
or die("Error: $DBI::errstr");
my $Genotype = 'Genotype'.1;
#The idea here is eventually I will ask the database how many Genotypes there are, and then loop it round to complete the following for each Genotype:
my $sql =qq(SELECT TransNo, gene.Gene FROM gene JOIN genotypegene ON gene.Gene = genotypegene.Gene WHERE Genotype like '$Genotype');
my $sth = $dbh_m-> prepare($sql);
$sth->execute;
my %hash;
my $transvalues = $sth->fetchrow_hashref;
my %hash= %$transvalues;
$sth ->finish();
$dbh_m->disconnect();
my $key;
my $value;
while (($key, $value) = each(%hash)){
print $key.", ".$value\n; }
Этот код не выдает никаких ошибок, но хеш% хранит только последнюю строку, взятую из базы данных (у меня появилась идея написать ее таким образом с с этого сайта ). Если я наберу:
while(my $transvalues = $sth->fetchrow_hashref){
print "Gene: $transvalues->{Gene}\n";
print "Trans: $transvalues->{TransNo}\n";
}
Затем он распечатывает все строки, но мне нужно, чтобы вся эта информация была доступна после того, как я закрыл соединение с базой данных.
У меня также есть связанный вопрос: в моей базе данных MySQL строка состоит, например, из 'Gene1' (Gene), '4' (TransNo). Как только я заберу эти данные из базы данных, как я делаю выше, TransNo все еще будет знать, с каким геном он связан? Или мне нужно для этого создать какую-то хеш-структуру хеша?