Die Funktionsweise eines DBMS ist mir schon bewusst. Ich habe es auch geschafft, den ein oder anderen Fremdschlüssel aufzulösen.
Leider sind die SQL Anfragen, die SchILD bzw. der Reportgenerator absetzen größtenteils sehr weitfassend. Es wird sehr oft einfach * (= gibt mir alles) abgerufen, obwohl eigentlich nur zwei Felder benötigt werden. Das muss dann wieder die Software zerpflücken, was die Programmausführung langsamer macht.
Die Ausführung des Reports, der "einfach" nur für alle Schüler der SEK I (460) die Fächer/ Kurse auflistet braucht über 2,5 Minuten. Die von mir erstellte SQL Abfrage 0,063 Sekunden. Warum? Weil ich statt einer foreach-Schleife und tausenden SQL-Queris in der Software einfach JOINS auf die entsprechenden Tabellen anwende und mir nur die Felder zurückgeben lassen, die ich auch brauche.
Aber Fall des Jahrgangs liefert der Reportgenerator einen anderen Wert. Ich kann aber aus dessen SQL-Statements nicht erkennen welches Feld er hier abfragt. Im Reportgenerator ist es das Feld "Jahrgang" aus der Quelle "Schueler". In der BD gibt es ebenfalls eine Tabelle "Schueler" und dort ein Feld "Jahrgang". Diese Werte stimmen aber nicht überein.
Ich habe den Report mal angefügt. Und hier zum Vergleich mein SQL-Statement:
Code: Alles auswählen
SELECT
Schueler.Jahrgang,
Schueler.ID,
SchuelerLernabschnittsdaten.Klasse,
EigeneSchule_Faecher.FachKrz,
Kurse.KurzBez,
SchuelerLeistungsdaten.Kursart
FROM
Schueler
JOIN
SchuelerLernabschnittsdaten ON SchuelerLernabschnittsdaten.Schueler_ID = Schueler.ID
LEFT JOIN
SchuelerLeistungsdaten ON SchuelerLeistungsdaten.Abschnitt_ID = SchuelerLernabschnittsdaten.ID
LEFT JOIN
Kurse ON Kurse.ID = SchuelerLeistungsdaten.Kurs_ID
LEFT JOIN
EigeneSchule_Faecher ON EigeneSchule_Faecher.ID = SchuelerLeistungsdaten.Fach_ID
WHERE
Schueler.Status IN (2)
AND Schueler.Jahrgang_ID IN (1 , 2, 3, 4, 5)
AND Schueler.Geloescht = '-'
AND SchuelerLernabschnittsdaten.Jahr = 2020
AND SchuelerLernabschnittsdaten.Abschnitt = 2
AND SchuelerLernabschnittsdaten.SemesterWertung = '+'
ORDER BY Schueler.Klasse
Zum Vergleich, der Reportgeneratur führt für jeden Schüler folgende Queries aus und muss die dann noch filtern:
Code: Alles auswählen
select Schueler.*, MONTH(Schueler.Geburtsdatum) as Geburtsmonat, DAY(Schueler.Geburtsdatum) as Geburtstag FROM Schueler WHERE Schueler.ID=xxxx
SELECT * FROM Versetzung WHERE SchulnrEigner=yyyyyy AND Klasse='05A'
SELECT * FROM SchuelerErzAdr WHERE Schueler_ID=xxxx ORDER BY Sortierung
SELECT * FROM SchuelerLernabschnittsdaten WHERE SchulnrEigner=yyyyyy AND Schueler_ID = xxxx AND Jahr=2020 AND Abschnitt=2 AND SemesterWertung='+'
select count(ID) as Anzahl from SchuelerLeistungsdaten where NotenKrz in ('5+','5','5-','6') and Abschnitt_ID=33811
SELECT * FROM SchuelerLD_PSFachBem WHERE SchulnrEigner=yyyyyy AND Abschnitt_Id = 33811
SELECT * FROM SchuelerLD_PSFachBem WHERE SchulnrEigner=yyyyyy AND Abschnitt_Id = 33811
SELECT LD.*, EF.FachKrz FROM SchuelerLeistungsdaten LD, EigeneSchule_Faecher EF WHERE EF.ID=LD.Fach_ID AND LD.SchulnrEigner=yyyyyy AND LD.Abschnitt_Id=33811 order by LD.Sortierung
select ID,KurzBez, ZeugnisBez from Kurse where ID=20842
select * from Fach_Gliederungen where Gliederung='GY9' and SchulnrEigner=yyyyyy order by Fach_ID, Fachklasse_ID
select ID,KurzBez, ZeugnisBez from Kurse where ID=20842
select ID,KurzBez, ZeugnisBez from Kurse where ID=20842
SELECT * FROM SchuelerErzAdr WHERE Schueler_ID=xxxx ORDER BY Sortierung
SELECT * FROM SchuelerLernabschnittsdaten WHERE SchulnrEigner=yyyyyy AND Schueler_ID = x AND Jahr=2020 AND Abschnitt=2 AND SemesterWertung='+'
select count(ID) as Anzahl from SchuelerLeistungsdaten where NotenKrz in ('5+','5','5-','6') and Abschnitt_ID=33811
SELECT * FROM SchuelerLD_PSFachBem WHERE SchulnrEigner=yyyyyy AND Abschnitt_Id = 33811
SELECT LD.*, EF.FachKrz FROM SchuelerLeistungsdaten LD, EigeneSchule_Faecher EF WHERE EF.ID=LD.Fach_ID AND LD.SchulnrEigner=yyyyyy AND LD.Abschnitt_Id=33811 order by LD.Sortierung
select ID,KurzBez, ZeugnisBez from Kurse where ID=20842
select ID,KurzBez, ZeugnisBez from Kurse where ID=20842
select ID,KurzBez, ZeugnisBez from Kurse where ID=20842
Aber ich kann hier leider nicht erkennen, aus welchem Feld der Wert für den Jahrgang kommt. Die von Ihnen vermutete Tabelle kommt in den Abfragen nicht vor. Aber gut möglich, dass der Reportgenerator diese Tabelle permanent im Speicher hat.
"Der Computer rechnet mit allem - nur nicht mit seinem Besitzer." Dieter Hildebrandt