Hallo,
wie gesagt, am besten wären mal beispieldaten mit dem gewünschten ergebnis, was du haben willst. dann wird auch vieles klarer.
Nun gut, ich will es mal mit Beispieldaten beschreiben. Für jeden meiner drei Berechnungsschritte gebe ich die gewünschten Ergebnisse an. Zunächst die Tabellen mit ihren Daten:
-------------------------------------------------------------------------
katalog: #idkatalog name
1 Katalog1
2 Katalog2
-------------------------------------------------------------------------
kategorie: #idkategorie #katalog_idkatalog gewichtung
1 1 0.1
2 1 0.2
3 2 0.8
4 2 0.9
-------------------------------------------------------------------------
parameter: #idparameter #kategorie_idkategorie gewichtung maximalpunkte
1 1 1.1 4
2 1 1.1 4
3 2 0.5 4
4 3 0.6 4
5 4 1 4
-------------------------------------------------------------------------
objekt_hat_parameter: #idobjekt #parameter_idparameter punkte
1 1 1
1 2 2
1 3 3
1 4 4
1 5 1
-------------------------------------------------------------------------
Für ein gegebenes Objekt mit der ID idobjekt 1:
-
Pro Parameter werden die erreichten Punkte durch die Maximalpunkte des Parameters geteilt und mit der Gewichtung des Parameters multipliziert, das Ergebnis hier als Parameterbewertung bezeichnet:
idparameter 1: 1 / 4 * 1.1 = 0.275
2: 2 / 4 * 1.1 = 0.55
3: 3 / 4 * 0.5 = 0.375
4: 4 / 4 * 0.6 = 0.6
5: 1 / 4 * 1 = 0.25 -
Pro Kategorie wird die Summe aller Parameterbewertungen durch die Summe aller Parametergewichtungen geteilt und mit der Gewichtung der Kategorie multipliziert, das Ergebnis hier als Kategoriebewertung bezeichnet:
idkategorie 1: (0.275 + 0.55) / (1.1 + 1.1) * 0.1 = 0.0375
2: (0.375) / (0.5) * 0.2 = 0.15
3: (0.6) / (0.6) * 0.8 = 0.8
4: (0.25) / (1) * 0.9 = 0.225 -
Pro Katalog wird die Summe aller Kategoriebewertungen durch die Summe aller Kategoriegewichtungen geteilt:
idkatalog 1: (0.0375 + 0.15) / (0.1 + 0.2) = 0.625
2: (0.8 + 0.225) / (0.8 + 0.9) = 0.603
Als Ergebnis der Abfrage will ich also haben:
#idkatalog wert
1 0.625
2 0.603
Hier nochmals meine Abfrage für 1) und 2):
SELECT katalog.name, SUM(objekt_hat_parameter.punkte / parameter.maximalpunkte * parameter.gewichtung) / SUM(parameter.gewichtung) * kategorie.gewichtung
FROM objekt_hat_parameter, parameter, kategorie, katalog
WHERE objekt_hat_parameter.idobjekt = **OBJEKTID**
AND objekt_hat_parameter.parameter_idparameter = parameter.idparameter
AND parameter.kategorie_idkategorie = kategorie.idkategorie
AND kategorie.katalog_idkatalog = katalog.idkatalog
GROUP BY kategorie.idkategorie
Viele Grüße
Volker