bionic
12-01-2006, 17:52
Hi,
Ich möchte aus einer Datenbank ein paar ausgewählte Datensätze auslesen und diese als Hash in einem Array speichern.
DB:
Spalte1 Spalte2 Spalte3
Test1A Test1B Test1C
Test2A Test2B Test2C
Test3A Test3B Test3C
Test4A Test4B Test4C
Ein Hash soll nun so aussehen:
%hash1 = (Spalte1 => "Test1A", u.s.w.)
Für jede Zeile soll ein Hash erstellt werden.
Schliesslich sollen die Hash in einem Array zwischengespeichert werden. Also @temp = (%hash1,%hash2,u.sw.)
Dieser Array wird nun durchlaufen und es wird ein neuer Hash gebildet, der NUR Elemente enthält, die in jedem einzelnen %hash von vorhin vorkommen.
Soviel zur Aufgabe... Mein Versuch war nun das ganze mittels Fetchhash abzuholen:
sub get_it {
my $dbh = shift;
my $tabletemp = shift;
my $id = shift;
my %temphash;
my %controlhash;
my @results;
# begin dbaccess
my $sql="SELECT * FROM $tabletemp WHERE ID='$id'";
my $sth = $dbh->prepare($sql) or die $dbh->errstr();
$sth->execute or die $dbh->errstr();
while (%temphash = $sth->fetchhash()){
push @results, \%temphash;
}
$sth->finish ();
# end dbaccess
# begin compare
foreach my %hash (@results){
foreach(keys(%hash)){
if ($hash{$_} eq $controlhash{$_} || !defined $controlhash{$_}){
$controlhash{$_} = $hash{$_};
}
else {
$controlhash{$_} = "";
}
}
}
# end compare
return %controlhash;
}
Ich bin mir ziemlich sicher, dass mein Code oben noch viele kleine Fehler hat. Aber stimmt das Prinzip mit dem speichern der Hashes im Array? Der Datenbankzugriff funktioniert. Leider crashed mir das Skript ohne Fehlermeldung. Er sagt etwas von wegen: "Too many headers".
Hat jemand einen guten Tipp für mich, oder kann mir einen Tipp geben wo suchen?
Vielen Dank!
Ich möchte aus einer Datenbank ein paar ausgewählte Datensätze auslesen und diese als Hash in einem Array speichern.
DB:
Spalte1 Spalte2 Spalte3
Test1A Test1B Test1C
Test2A Test2B Test2C
Test3A Test3B Test3C
Test4A Test4B Test4C
Ein Hash soll nun so aussehen:
%hash1 = (Spalte1 => "Test1A", u.s.w.)
Für jede Zeile soll ein Hash erstellt werden.
Schliesslich sollen die Hash in einem Array zwischengespeichert werden. Also @temp = (%hash1,%hash2,u.sw.)
Dieser Array wird nun durchlaufen und es wird ein neuer Hash gebildet, der NUR Elemente enthält, die in jedem einzelnen %hash von vorhin vorkommen.
Soviel zur Aufgabe... Mein Versuch war nun das ganze mittels Fetchhash abzuholen:
sub get_it {
my $dbh = shift;
my $tabletemp = shift;
my $id = shift;
my %temphash;
my %controlhash;
my @results;
# begin dbaccess
my $sql="SELECT * FROM $tabletemp WHERE ID='$id'";
my $sth = $dbh->prepare($sql) or die $dbh->errstr();
$sth->execute or die $dbh->errstr();
while (%temphash = $sth->fetchhash()){
push @results, \%temphash;
}
$sth->finish ();
# end dbaccess
# begin compare
foreach my %hash (@results){
foreach(keys(%hash)){
if ($hash{$_} eq $controlhash{$_} || !defined $controlhash{$_}){
$controlhash{$_} = $hash{$_};
}
else {
$controlhash{$_} = "";
}
}
}
# end compare
return %controlhash;
}
Ich bin mir ziemlich sicher, dass mein Code oben noch viele kleine Fehler hat. Aber stimmt das Prinzip mit dem speichern der Hashes im Array? Der Datenbankzugriff funktioniert. Leider crashed mir das Skript ohne Fehlermeldung. Er sagt etwas von wegen: "Too many headers".
Hat jemand einen guten Tipp für mich, oder kann mir einen Tipp geben wo suchen?
Vielen Dank!