Serverlastigkeit bei Abfrage jedes Tages

worki2k1

Erfahrenes Mitglied
Hallo Leute,

ich stehe vor einem Problem, bei dem ich versuchen möchte eine möglichst wenig Serverbelastung hervorzurufen.

Folgendes Problem: In einer Schulverwaltungssoftware tragen unsere Teilnehmer jeden Tag ein bis mehrere Berichte ein, was diese an dem entsprechenden Tag gemacht haben. Ist also vergleichbar mit einem Berichtsheft wie man es aus der Ausbildung kennt.
Die Teilnehmer sollen nun vom System auf fehlende Berichte hingewiesen werden. Die wohl schlechteste Lösung (aber einfach) wäre nun jeden Tag durchzugehen und zu schauen ob dort mind. ein Bericht vorliegt. Da die Teilnehmer bei uns aber im Durchschnitt 5-8 Monate verweilen, ist es eine recht hohe Serverlast mal eben schnell alle Tage in 8 Monaten zu überprüfen.

Mein zweiter Lösungsansatz sieht so aus:
Mit der Anweisung GROUP BY in SQL lasse ich mir einfach alle Berichte des Teilnehmers gruppiert nach Datum zurückgeben. Nebenbei erstell ich ein Array mit allen Datumsangaben vom Eintrittstermin des Teilnehmer bis zum heutigen Tag (sofern der heutige Tag früher dem Austrittstermin ist) und füge als Wert eine 1 (bzw. true) an den Tagen ein wo er mir einen Bericht anzeigt. Somit könnte ich ganz genau die Tage herausfinden an denen der Teilnehmer einen Bericht vergessen hat.

Hat vielleicht jemand eine bessere Idee? Es sei an dieser Stelle gesagt, dass es bei uns im Haus auch Berater gibt, denen mehrere Teilnehmer zugeordnet sind. Die Berater sollen ebenfalls einsehen können ob einer der Teilnehmer irgendwo einen Bericht vergessen hat. Diese Funktion sollte also innerhalb einer Seite auch für mehrere Teilnehmer ausgeführt werden können.

Also wie gesagt, falls jemand noch andere Vorschläge zur Lösung hat kann sie mir gern unterbreiten. Für Hilfe bedanke ich mich schon jetzt.
 
-

Hallo,
ich würde das durch reines Datenbankdesign lösen. Eine Tabelle, in denen du alle Tage eines Jahres einträgst, abzüglich Wochenenden und Ferientagen. Dann hast du ja sicherlich eine Tabelle, in der alle Personen gelistet sind. Die mit einer weiteren Tabelle zu einer m:n Beziehung verbunden und du kannst festhalten, welche Person an welchem Tag einen Bericht erstellt hat.
Hoffe, es ist klar, wie ich das meine :)

Gruß
 
Du kannst doch die Datenbank in dem Feld für den Eintrag NULL Aktivieren und dann einfach nach WHERE NULL queryn oder?
 
Mhhh ja die beiden Lösungsvorschläge sind schon einleuchtend, funktionieren aber nicht so ganz da ich die Tage bzw. Einträge nicht im Voraus in die Datenbank schreibe. Schematisch dargestellt sieht das ganze so aus:


Tabelle BERICHTE
----------------
- Id
- BenutzerId
- Datum
- Langtext


Für jeden Eintrag, den der Benutzer erstellt wird ein Datensatz gespeichert. Das System steht an dieser Stelle ja schon und sollte möglichst von der Datenbank nicht mehr geändert werden. Ich möchte vermeiden alle Tage im Voraus in die Datenbank zu schreiben. Das habe ich bei einem anderen System schon gemacht, was verwaltungstechnisch umfangreiche Probleme mit sich brachte und absolut nicht funkioniert hat. Deshalb überhaupt der Grund ein neues System zu programmieren.
 
du könntest es doch auch über Cronjob machen, der Nachts oder einmal die Woche läuft und bei jedem User durchschaut, ob am vorrigen tag nen bericht geschrieben wurde, wenn nicht, dann soll er gleich ne Mail an den user schicken oder so.
 
@low-group: Diese Möglichkeit würde ich gern nutzen, aber wir liegen in der Firma auf einem 1&1 Premium-Paket und da gibts leider keine Cronjobs. Ein Providerwechsel ist zunächst erstmal ausgeschlossen, da es einen zu hohen Aufwand bedeutet. Hab das alles schon mit Chef durchgesprochen. Ich würde ja gern zu ArtFiles wechseln.
 
Zurück