Verfügbarkeitsabfrage MySQL Datenbank
Hallo liebe Community,
ich habe folgendes Problem:
Ich habe eine Webanwendung in der Fahrzeuge pro Tage gebucht werden können.
Also meine Tabelle sieht so aus:
fahrzeuge
- id
- fahrzeugid
- fahrzeugname
- gebuchtvon
- gebuchtbis
Sobald ein Fahrzeug gebucht wurde, steht dann in der Tabelle drinnen:
id 1
fahrzeugid 1
fahrzeugname testfahrzeug
gebuchtvon timestamp (10:00 Uhr)
gebuchtbis timestamp (12:00 Uhr)
id 2
fahrzeugid 1
fahrzeugname testfahrzeug
gebuchtvon timestamp (14:00 Uhr)
gebuchtbis timestamp (17:00 Uhr)
z.B. wenn ich jetzt an Tag X von 10:00 Uhr - 12:00 Uhr und dann von 14:00 Uhr - 17:00 Uhr das Fahrzeug gebucht habe, würde ich gerne die noch nicht gebuchten Termine dieses Fahrszeugs anzeigen lassen.
Wie mache ich diese Abfrage am besten?
SELECT * FROM fahrzeuge WHERE fahrzeugid = 1;
Dann bekomme ich alle gebuchten Fahrzeuge, jedoch brauch ich das genau umgekehrt also das mir die Webanwendung dann:
Verfügbarkeit:
fahrzeug1 08:00 Uhr - 10:00 Uhr
fahrzeug1 12:00 Uhr - 14:00 Uhr
fahrzeug1 17:00 Uhr - 18:00 Uhr
anzeigt. jedoch soll nur von 08:00 Uhr bis 18:00 Uhr berrechnet werden (sonst würde da ja auch stehen fahrzeug1 00:00 Uhr - 10:00 Uhr, und 17:00 Uhr - 00:00 Uhr
Habt ihr eine Idee wie ich das lösen könnte?
DANKE!
glg Markus
ich habe folgendes Problem:
Ich habe eine Webanwendung in der Fahrzeuge pro Tage gebucht werden können.
Also meine Tabelle sieht so aus:
fahrzeuge
- id
- fahrzeugid
- fahrzeugname
- gebuchtvon
- gebuchtbis
Sobald ein Fahrzeug gebucht wurde, steht dann in der Tabelle drinnen:
id 1
fahrzeugid 1
fahrzeugname testfahrzeug
gebuchtvon timestamp (10:00 Uhr)
gebuchtbis timestamp (12:00 Uhr)
id 2
fahrzeugid 1
fahrzeugname testfahrzeug
gebuchtvon timestamp (14:00 Uhr)
gebuchtbis timestamp (17:00 Uhr)
z.B. wenn ich jetzt an Tag X von 10:00 Uhr - 12:00 Uhr und dann von 14:00 Uhr - 17:00 Uhr das Fahrzeug gebucht habe, würde ich gerne die noch nicht gebuchten Termine dieses Fahrszeugs anzeigen lassen.
Wie mache ich diese Abfrage am besten?
SELECT * FROM fahrzeuge WHERE fahrzeugid = 1;
Dann bekomme ich alle gebuchten Fahrzeuge, jedoch brauch ich das genau umgekehrt also das mir die Webanwendung dann:
Verfügbarkeit:
fahrzeug1 08:00 Uhr - 10:00 Uhr
fahrzeug1 12:00 Uhr - 14:00 Uhr
fahrzeug1 17:00 Uhr - 18:00 Uhr
anzeigt. jedoch soll nur von 08:00 Uhr bis 18:00 Uhr berrechnet werden (sonst würde da ja auch stehen fahrzeug1 00:00 Uhr - 10:00 Uhr, und 17:00 Uhr - 00:00 Uhr
Habt ihr eine Idee wie ich das lösen könnte?
DANKE!
glg Markus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 185444
Url: https://administrator.de/forum/verfuegbarkeitsabfrage-mysql-datenbank-185444.html
Ausgedruckt am: 04.04.2025 um 06:04 Uhr
5 Kommentare
Neuester Kommentar
Hallo,
in MySQL gibt es auch MAX und MIN Funktionen. Da du dies ja als Timestamp speicherst kannst du mit MIN den kleinsten Wert ermitteln und mit MAX den höchsten Wert. Wenn du diese Werte jeweils wieder umwandelst haste deine Zeit von 8 bis 18 Uhr.
EDIT: Der SQL Befehl müsste in etwa so aussehen (ungetestet).
Müsste dann deine gewünschten 8 und 18 Uhr liefern.
Gruß
in MySQL gibt es auch MAX und MIN Funktionen. Da du dies ja als Timestamp speicherst kannst du mit MIN den kleinsten Wert ermitteln und mit MAX den höchsten Wert. Wenn du diese Werte jeweils wieder umwandelst haste deine Zeit von 8 bis 18 Uhr.
EDIT: Der SQL Befehl müsste in etwa so aussehen (ungetestet).
SELECT MIN(gebuchtvon) as von, MAX(gebuchtbis) as bis FROM fahrzeuge WHERE fahrzeugid = 1;
Gruß
Hallo,
und das muss nur über SQL gelöst werden? Das ist bestimmt auch möglich, eigentlich braucht man ja die Differenzen abzuziehen wo das Auto gebucht ist, aber ich komme da auch gerade nicht auf den richtigen Ansatz.
Man könnte das aber auch ohne viel Aufwand in PHP lösen.
Nehmen wir deinen Standard Befehle
Dort wird dann eine Schleife durchlaufen die dir deine Anzeige erstellt.
In der Schleife brachst du dann ja nur etwas leicht verändern. Du erstellt die deine Startuhrzeit (z.B. 0.00 Uhr). Dann hast bekommst Du ja den ersten Buchungszeit mit dem Anfangswert.
Also ist das Ergebnis 0.00 Uhr - AnfangBuchung.
Dann für den nächsten Zeitraum hat man den Endwert der 1. Buchung bis zur nächsten Buchung usw.
Der Code in PHP KÖNNTE in etwa so aussehen (ungetestet)
Das müsste es eigentlich schon gewesen sein wenn ich bei der wärme nicht etwas total vergessen habe 
und das muss nur über SQL gelöst werden? Das ist bestimmt auch möglich, eigentlich braucht man ja die Differenzen abzuziehen wo das Auto gebucht ist, aber ich komme da auch gerade nicht auf den richtigen Ansatz.
Man könnte das aber auch ohne viel Aufwand in PHP lösen.
Nehmen wir deinen Standard Befehle
SELECT * FROM fahrzeuge WHERE fahrzeugid = 1;
Dort wird dann eine Schleife durchlaufen die dir deine Anzeige erstellt.
In der Schleife brachst du dann ja nur etwas leicht verändern. Du erstellt die deine Startuhrzeit (z.B. 0.00 Uhr). Dann hast bekommst Du ja den ersten Buchungszeit mit dem Anfangswert.
Also ist das Ergebnis 0.00 Uhr - AnfangBuchung.
Dann für den nächsten Zeitraum hat man den Endwert der 1. Buchung bis zur nächsten Buchung usw.
Der Code in PHP KÖNNTE in etwa so aussehen (ungetestet)
$start = 00:00;
// Die Schleife liefert alle Ergebnisse vom SQL Befehl
while( $row = mysql_fetch_object() )
{
// Berücksichtige jetzt nicht den Timestapm umzuwandeln in eine Uhrzeit
echo $start . "Uhr - " . $row->buchungAnfang . "Uhr <br/>\n";
$start = $row->buchungEnde;
}
Also ich möchte nicht die zweite Ausgabe in meiner WebApp haben, sondern die Erste. Ich schaffe das irgendwie nicht.
... woher soll deine DB denn auch wissen wann man deine Fahrzeuge noch mieten kann ?Am besten Du sagst es ihr mit einer Dummy Tabelle und machst dann ein LEFT JOIN zu deiner bereits erzeugten Ergebnismenge.
Deine Dummy Tabelle:
8:00
9:00
10:00
...
16:00
17:00
18:00
8:00 Fahrzeug1 Fahrzeug2
9:00 Fahrzeug1 Fahrzeug2
10:00 NULL NULL
...
16:00 Fahrzeug1 Fahrzeug2
17:00 Fahrzeug1 Fahrzeug2
18:00 NULL NULL
EDIT: je nachdem ob du Stündlich oder viertelstündlich vermietest - diese "Reihe" kann man auch dyn. als temp. Tabelle erzeugen