Hobbes
26-06-2008, 17:02
Hi allerseits,
ich habe in meinem Programm viele kleine Datenbankabfragen und würde gerne wissen, ob ich die zu einer Abfrage zusammenfassen kann. Zugrunde liegt eine DBF-Datenbankdatei, die in Java über einen JDBC-Treiber angesprochen wird *grusel*
Die Tabelle, um die es geht, hat die Spalten Datum (PrimaryKey,Date), Gruppennr (NUMBER), Partner (STRING), AufgabeErfüllt (BOOLEAN), WarAnwesend (BOOLEAN)
Der Schlüssel ist die Datumsspalte. Für jeden Tag existiert ein Eintrag.
Nun brauche ich mehrere Informationen aus der Tabelle, z.B. wie oft die Person in einem gewählten Zeitraum anwesend war (nach Jahren gruppiert). Für jede Zeile dieses Ergebnisses brauche ich jeweils noch die Gruppennr an einem bestimmten Datum, der Partner an einem anderen Datum und ob an einem dritten Datum die Aufgabe erfüllt wurde.
Das ergibt die Abfragen
SELECT YEAR(Datum) Jahr, SUM(IF(WarAnwesend=true,1,0)) Anwesenheitstage
FROM Tabelle WHERE Datum BETWEEN '2007-11-01' AND '2008-03-20'
GROUP BY YEAR(Datum)
Für die erste Zeile des Resultsets
SELECT Gruppennr FROM Tabelle WHERE Datum='2007-12-01'
SELECT Partner FROM Tabelle WHERE Datum='2007-11-13'
SELECT AufgabeErfüllt FROM Tabelle WHERE Datum='2007-12-20'
Für die zweite Zeile des Resultsets sind dann nochmal diese Abfragen (mit anderen Daten) nötig.
Da diese Abfragen sehr häufig notwendig sind, würde ich gerne möglichst wenig Datenbankzugriffe haben. Ist das möglich?
ich habe in meinem Programm viele kleine Datenbankabfragen und würde gerne wissen, ob ich die zu einer Abfrage zusammenfassen kann. Zugrunde liegt eine DBF-Datenbankdatei, die in Java über einen JDBC-Treiber angesprochen wird *grusel*
Die Tabelle, um die es geht, hat die Spalten Datum (PrimaryKey,Date), Gruppennr (NUMBER), Partner (STRING), AufgabeErfüllt (BOOLEAN), WarAnwesend (BOOLEAN)
Der Schlüssel ist die Datumsspalte. Für jeden Tag existiert ein Eintrag.
Nun brauche ich mehrere Informationen aus der Tabelle, z.B. wie oft die Person in einem gewählten Zeitraum anwesend war (nach Jahren gruppiert). Für jede Zeile dieses Ergebnisses brauche ich jeweils noch die Gruppennr an einem bestimmten Datum, der Partner an einem anderen Datum und ob an einem dritten Datum die Aufgabe erfüllt wurde.
Das ergibt die Abfragen
SELECT YEAR(Datum) Jahr, SUM(IF(WarAnwesend=true,1,0)) Anwesenheitstage
FROM Tabelle WHERE Datum BETWEEN '2007-11-01' AND '2008-03-20'
GROUP BY YEAR(Datum)
Für die erste Zeile des Resultsets
SELECT Gruppennr FROM Tabelle WHERE Datum='2007-12-01'
SELECT Partner FROM Tabelle WHERE Datum='2007-11-13'
SELECT AufgabeErfüllt FROM Tabelle WHERE Datum='2007-12-20'
Für die zweite Zeile des Resultsets sind dann nochmal diese Abfragen (mit anderen Daten) nötig.
Da diese Abfragen sehr häufig notwendig sind, würde ich gerne möglichst wenig Datenbankzugriffe haben. Ist das möglich?