Hallo,
Nun habe ich mir überlegt,
dass man einen Table hat,
und den als gesamtheit 1x einließt,
und dann teilwerte wiedergibt, wie z.B. in einem Text.
Du kannst z.B. mein Beispiel so modifizieren
my $ids = join(',',@ids);
my $sth = $dbh->prepare("SELECT * FROM table");
$sth->execute;
my @werte;
my @tabelleninhalt
while(@werte = $sth->fetchrow_array)
{
push @tabelleninhalt, [@werte];
}
Damit kriegst Du eine Liste von Listen, die den ganzen Tabelleninhalt gespeichert hält.
Für solche Fälle gibts sogar eine eigene Funktion
my $tabelleninhalt = $sth->fetchall_arrayref;
Achtung: $tabelleninhalt ist dann eine Referenz auf eine Liste.
Wie man mit Referenzen bzw. Listen von Listen umgeht findest Du unter
perldoc perllol
perldoc perldsc
und
perldoc perlreftut
Aber bitte sei gewarnt. Das kann auch ganz schön ins Auge gehen. Wenn Du nämlich eine große Tabelle, mit vielen Datensätzen, in ihrer Gesamtheit in den Speicher wuchtest, dann kann der Speicherbedarf immens werden, da Perl allein schon für die interne Verwaltung solcher verschachtelten Listen einiges braucht.
Also nur mit bedacht darauf zurückgreifen.
Wichtig ist außerdem, daß Du bei den Abfragen nur die Felder bzw nur die Datensätze zurückgeben läßt, welche unbedingt vonnöten sind. Das obige Beispiel ist in diesem Zusammenhang ziemlich unglücklich gewählt.
Erstens verwende ich anstelle expliziter Feldangaben '*', was bedeutet, daß immer alle Felder gelesen werden, egal ob ich sie nun brauche oder nicht.
Zweitens wird aus mangel einer Einschränkung die ganze Tabelle abgefragt. Das ist zwar nicht immer zu vermeiden. Ich habe aber schon oft gesehen, daß von der Datenbank alle Datensätze abgeholt werden, und im Programm dann die notwendigen aussortiert werden, obwohl das mit einer WHERE-Klausel genausogut machbar wäre.
Grundlegendes Ziel sollte also sein, beide Systeme, die Datenbank und das Perlscript, oder auch andere Programme, so gering wie notwendig zu belasten.
Ich hoffe, dich wieder einen Schritt weiter gebracht zu haben.
Grüße
Klaus