MySQL Datenbank Lösung für ein Personenleitsystem PGSys

mediastudio

Neuer Benutzer
Beiträge
4
Hallo,
ich hoffe hier im Forum für mein Vorhaben eine Lösung oder einen Lösungsansatz zu finden.
Ich habe ein Personenleitsystem „PGSys“ entwickelt. Das System beinhaltet Audio und Video Aufruf über TV-Displays und Information
auf das Handy mit „PGSys to go“. Das gesamte System wird nur mittels browser bedient und bedarf keiner Installation auf Cliens.

PGSys arbeitet mit QR-Code, automatischer Erstellung von Wartemarken und gleichzeitiger Generierung der PHP-page für den einzelnen
Patientenaufruf „PGSys to go“ für sein Handy, function wie beim Restaurant Pager.
Ok, das nur zu meinem Projekt, gesteuert über eine MySQL Datenbank.

Ich vergebe Wartemarken (Patientenaufrufnummern) z.B. A1 – A99
Die Anzahl ist je nach Patientenaufkommen verschieden.
Die Wartemarken sind in der Datenbank jeweils
als „1“ für Patient wurde noch nicht aufgerufen
und „0“ Patient wurde aufgerufen.

Jetzt brauche ich eine Berechnung für die „Wartezeit X“ des einzelnen Patienten und die Anzahl der Personen vor dem nächst folgendem Patienten,
die immer neu berechnet wird wenn ein Patient aufgerufen und die Nummer des Patienten mit „0“ in der Datenbank quittiert.
Alle Einträge sollten sich automatisch nach oben verschieben wenn ein Eintrag „0“ wird.
Hierdurch könnte analog die Wartezeit und die Reihenfolge bestimmt werden. Die Wartezeit wird für Jeden Patient vorab mit einer fiktiven
Wartezeit von "XX" z.B. 10 Minuten pro Patient beim erstellen der Wartemake mit in die Datenbank geschrieben, hier wird nur von der Gesamtzeit die
die Zeit ab oder bei einem Neueintrag aufaddiert. Es muss wie ein Schieberegister funktionieren, A1,A2,A3,A4,A5, usw.
Selbst wenn A2 oder A4 entnommen wird, müssen die hinteren Daten in der Hierarchie nach oben aufrutschen, so das die Reihenfolge immer fortlaufend bleibt.
Wenn neue Wartewarken folgen, werden die am Schluss des Registers eingetragen.
Ich hoffe man kann an Hand meiner Beschreibung mein Problem zu verstehen.

Eine Vorstellung des Projekts kann man auf meiner Webpage einsehen.
wf-consulting PGSys

Für Hilfe bin ich Dankbar.
Gruß
Wilfried
 
Werbung:
Wie stellst Du Dir die "Berechnung" vor (nur mal so eine Idee, keine Beschreibung mit Register und Hierarchie)?
Ein Algorithmus, der anhand von 5-98 Kennzahlen eine Wartezeit berechnet?
Ein Übertrag der realen, abgeschlossenen Wartezeiten auf den aktuellen Patienten?
..?

Noch ein paar Anmerkungen
- "Nach oben" gibt es nicht in einer Datenbank.
- Entweder Reihenfolge oder Hierarchie (Letzteres passt m.E. nicht zur Problemstellung)
- Gemäß deiner Beschreibung und meinem Verständnis von Wartezeit gibt es niemals eine Änderung der Reihenfolge.
(Ausnahme: Notaufnahme, nicht blockierende Ressourcennutzung "Will jemand nur Currywurst und kann passend zahlen?", Privatpatient, ...)
- Widerspruch: "selbst wenn a2 und a4 entnommen werden", das ist gegen die Reihenfolge. Nagut, entweder Privatpatienten oder Todesfall.
- mal als Frage: Willst Du wirklich beim Aufrück-Schritt die Wartezeiten aktualisieren?

Zur letzten Frage ein Szenario: angenommen, Du trägst die aktualisierte Wartezeit ein und alle 10 Minuten wird ein Patient aufgerufen. Dann bedeutet das, die Darstellung der Wartezeit für Konsumenten dieser Anzeige ändert sich 10 Minuten lang nicht?
 
Klingt für mich wie eine einfach kumulative Summe.

Code:
sum(wartezeit) over (order by warte_position) as verbleibende_wartezeit

Evtl. könnte man die bis jetzt gewartet Zeit noch abziehen:

Code:
sum(wartezeit) over (order by warte_position) - (current_timestamp - warten_start) as verbleibende_wartezeit
Ich weiß grad nicht wie MySQL das Subtrahieren von timestamp Werten unterstützt. Der obige Code würde in standard SQL funktionieren wenn wartzeit mit dem Datentyp interal definiert ist.

Wobei "wartezeit" die von Dir angesprochene "fiktive Wartezeit" ist, die beim Anlegen einer Wartemarke eingetragen wurde.
Aber ohne genauere Angaben zum Datenmodell wird es schwierig da mehr zu sagen.
 
Hallo,
es freut mich das ich Aufmerksamkeit bekomme.
Die Änderung der Reihenfolge für ein Patient kann sich immer ändern. Wenn z.B. A2 nur EKG bekommt und sofort aufgerufen wird,
aber A1 z.B. noch warten muss, weil er zum Arzt rein muss. Das kann mit jeder Nummer passieren, deshalb ist die Angabe für ihn
wichtig um eine eventuelle Zeitangabe und eine Angabe der Patienten vor ihm . Das ist für ihn auf dem Handy „PGSys to go“ einzusehen.
Es geht hier nicht um eine korrekte Zeitrechnung, sondern sollte aufgrund der eingetragenen Wartemarken addiert oder abgezogen werden.
Wichtig ist die Angabe der Anzahl von Patienten vor ihm, wonach die Wartezeit fiktiv Zeit"xx" angegeben wird.
 
Gut, Du bekommst nicht nur Aufmerksamkeit, sondern auch Rückfragen. :)

Weitere Rückfragen, nur damit wir nicht aneinander vorbei reden:
Also Klartext, es soll eine Prognose der noch für den jeweiligen Patienten bevorstehenden Wartezeit erstellt werden.
Die Zahl der Patienten vor ihm ist ja bekannt und "wichtig", wie Du schreibst, da sie vermutlich die prognostizierte Wartezeit beeinflusst.
Richtig?
 
Ja das ist richtig eine Prognose der noch für den jeweiligen Patienten bevorstehenden Wartezeit.
Aber die Anzahl der Patienten vor jedem Patient ist nicht bekannt, es ist die "Variable" welche sich ändert, da die Patienten
nicht der Reihenfolge nach aufgerufen werden.
Und das ist mein Problem, eine Reihenfolge zu bilden, egal welche Nummer zwischendurch von der Warteliste ausgetragen wird. Die restlichen Patienten bleiben weiter bis zum Aufruf auf der Warteliste die dann als neue Reihenfolge gebildet wird.
Hier mal ein Bild vom Web-GUI für Wartemarken.
 

Anhänge

  • Wartemarken.png
    Wartemarken.png
    65,5 KB · Aufrufe: 13
Für mich gehört sowas ganz klassisch in die Applikation und nicht in die Datenbank. Außerdem MUSS die Anzahl der Patienten vor jedem Patienten bekannt sein. Schließlich legst du ja genau diese Information in deiner Datenbank ab. Ich würde außerdem an die Wartemarke noch anhängen wo der Patient hinmuss. Also Wartemarke für EKG, um bei deinem Beispiel zu bleiben, und Wartemarke für Arzt. Und wo ich jetzt drüber nachdenke, die Reihenfolge hast doch eh schon in deiner Datenbank und wird über das Flag festgelegt, egal welche Nummer gezogen wird. Die Wartezeit zu berechnen ist auch nicht möglich. Dazu brauchst Du einen Zeitrahmen und den muss Dir dein Kunde geben. Also ein Parameter beim Einrichten deiner Applikation.
 
Ich weiß nicht, ob sowas in die Applikation gehört, als was die besser könnte, außer der Anzeige.
Anzahl und Reihenfolge der Patienten müssen bekannt sein, ja. Beim Thema Reihenfolge und > Wartezeit geht es lediglich um die Frage, ob sich die Reihenfolge ändern kann. Das kann sie offenbar, aber nur durch frühzeitiges Verlassen der Warteschlange.
Die Nummern dienen -denke ich- der anonymen Anzeige, wie im Schnellrestaurant oder auf beim Amt und haben sonst keine Funktion.
Die Wartezeitberechnung war nicht exakt gefordert, ein Zeitrahmen könnte initial vorgegeben werden (das was der Anwender als erstes sähe, so lange nichts genaueres bekannt ist). Sobald ein einziger Patient abgearbeitet ist, gibt es eine reale Wartezeit und damit eine Bearbeitungsgeschwindigkeit.
Mit einer Bearbeitungsgeschwindigkeit Patienten Pro Stunde und der Anzahl vorne in der Warteschlange kann daraus eine grobe, individuelle Wartezeit errechnet werden. Es wäre nicht super genau, naturgemäß, aber wenn vor mir gerade ein Bus mit einer Fußballmannschaft im Wartezimmer gelandet ist, würde sich das deutlich und realistisch auf die prognostizierte Wartezeit auswirken.

Das Bild hilft mir bei den Überlegungen nicht weiter. Was stellt das dar? Ist? Soll? Und wo gehört es hin, Monitor im Wartezimmer? Handy? Bedienung?
 
Werbung:
Ich habe nun mein Problem gelöst, aus einer Tabelle mit X Spalten also für mich von A1 bis A100,
ermittle ich die Anzahl von Personen die vor einem sind, kann beliebig erweitert werden.

Das oben von mir gepostete Bild zeigt die Maske in der automatisch beim Anfordern einer
Wartemarke diese erzeugt wird und die Nummer in der Datenbank mit „1“ UPDATE.
Gleichzeitig wird für die Nummer eine PHP-Datei erzeugt die über den QR-Code auf ein Handy
übertragen wird und alle relevanten Daten zeigt. Die Datei ist eine aktive Webpage auf dem Server.

Bei Aufruf dieser Nummer spielt das Handy einen Gong ab, Funktion wie beim Restaurant Pager. Man kann die Anzahl der Personen sehen die noch vor einem sind. Die eventuelle Wartezeit wird als fiktiv Zeit"xx" angezeigt. Wenn der Patient im Zimmer vom Arzt sitz, dann quittiert der Arzt den Aufruf und die Nummer wird in der Datenbank auf „0“ gesetzt.
Dieses Konstrukt kann nun ohne Probleme mit besserer Zeitberechnung, z.B. verschiedene Behandlungszeiten für unterschiedliche Krankheiten erweitert werden.

<?php
include 'db.inc'; // Datenbank Verbindungsdaten laden
$wartezeit = 15; // Wartezeit fiktiv Zeit"xx" angegeben
# Personenaufruf Nummer und Wartezeit ermitteln
$mysqli = new mysqli($_db_host, $_db_username, $_db_passwort, $_db_datenbank);
if ($mysqli->connect_errno) {die("Verbindung fehlgeschlagen: " . $mysqli->connect_error);
}

$sql = "SELECT * FROM $_tabelle_1 WHERE id = 0";
$statement = $mysqli->prepare($sql);
$statement->execute();
$result = $statement->get_result();
$d = 0; // von Datenbank Anfang
$d1 = 100; // diese Variable entspricht der abgefragten Wartenummer
// hier läuft die Schleife immer nur bis zum Wert der Nummer
while($row = $result->fetch_assoc()) {
while ($d <= $d1) {
$d++; if($row["A$d"] > 0) { echo "A$d ".$row["A$d"]."<br>"; $anzahl = $anzahl + $row["A$d"];}
}
$anzahl = $anzahl -1; // eigene Nummer abgezogen
echo "<br>" ."Es sind ".$anzahl." Personen vor Ihnen";
echo "<br>" ."Ihre Wartezeit beträgt ca. " .$wartezeit * $anzahl ." Minuten";
}
# Datenbankverbindung schließen
$mysqli->close();
?>
 
Zurück
Oben