[MySQL Server 5.0] Problem beim SQL-Statement-Bauen

Markus_K

Grünschnabel
Hallo Forumsgemeinschaft,
es wäre schön, wenn mir jemand bei dem Zusammenbau eines SQL-Statements helfen könnte.
Zum Verständnis: Es gibt Berichte. Ein Bericht kann mehrere Themen haben. Ein Thema kann mehrere Einträge haben. Und ein Eintrag hat eine Relevanz.

Ich habe eine Tabelle eintraege, die die folgenden (, relevanten) Spalten hat:
oid (int), berichtID(int), datum (date), relevanz (tinyint) und thema (varchar).

Jetzt will ich in der Tabelle berichte eine Spalte relevanz füllen. Und zwar ist die Relevanz eines Berichts die höchste Relevanz der letzten für jedes Thema eingegebenen Einträge.
Um den neuesten Eintrag zu bestimmen braucht man Datum und oid. (Mehrere Einträge für ein Thema und Bericht am selben Tag -> nimm höchste oid.)

Bin in SQL nicht gut und habe mich einige Stunden mit geschachtelten selects, maxs und group bys rumgeschlagen und befürchte mittlerweile, dass ich es ohne fremde Hilfe einfach nicht innerhalb der nächsten Tage hinbekomme. :confused:

Ich wollte es mit java machen, aber das würde SEHR lange dauern. Es sind ca 70000 Berichte und ca 350 Themen. Aber es sah ungefähr so aus (PSEUDOPseudocode):

berichte = db.getBerichte;
themen = db.getThemen;
berichtRelevanz[berichte.length];

for(alle Berichte){
themenrelevanz[];
for(alle themen){
lastEintrag = db.getLastEintragFürBerichtUndThemaOrderBy(datum, oid);
themenrelevanz[thema] = lastEintrag.getRelevanz();
}
berichtRelevanz[bericht] = max(themenRelevanz[]);
}

Das ewige hin und her über jdbc dauert einfach viel zu lange. Ich hoffe sehr, dass mir hier jemand helfen kann.
Danke schon mal für´s Lesen und mfG,
Markus
P.s. Schönen Feierabend :mad:
 
Kannst du die Tabellen mal schöner aufbauen? Dann ist das was leichter! Zum Beispiel so:

Tabelle1:
tbl.ID | FK.ID | Name | Vorname

Wobei der Fett gedruckte der Primärschlüssel ist ;) Am besten alle Tabellen, die damit was zu tun haben, und dann einmal die Spalten (mit Tabellennamen davor) die du als Ergebnis brauchst. So wird es wesentlich leichter sein dir zu helfen bzw. dir Tipps zu geben!


Gruß Radhad
 
Guten Morgen Radhad,

aber das mach´ich doch gerne ;-) :

eintraege:
oid (int) | berichtID (int) | thema (VARCHAR) | datum (date) | relevanz(tinyint) ...
(berichtID und thema sind "Fremdschlüssel" aus berichte und themen.)
(Ich benutze aber kein wirkliches Konzept für die Fremdschlüssel.)

berichte:
oid (int) | relevanz (tinyint) ...

themen:
identifier (VARCHAR) | ...

Vorab schon einmal danke für´s Interesse. :-) Es greift nur ein Java-Server auf die DB zu. Der muss sich momentan für ein paar (30 - 40) Berichte alle Einträge holen, nach Themen ordnen, nach Alter ordnen und dann die größte Relevanz vom letzten Eintrag von jedem Thema anzeigen. Das dauert mir zu lange. Daher will ich den Wert direkt aus´m Bericht ziehen können.

Wollte mir per JDBC ein ResultSet zurückgeben lassen, das jeweils berichte.oid und den Wert für die neue Spalte berichte.relevanz hat. und sie dann zurückschreiben. Von mir aus muss man den Umweg über JDBC auch nicht machen, aber wie gesagt: über einfache select, update und delete-Statements bin ich noch nicht hinausgekommen... Also :rtfm: würde definitiv zu lange dauern... :rolleyes:
 
Zurück