Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Verfügbarkeitsabfrage MySQL Datenbank

Frage Entwicklung PHP

Mitglied: iceget

iceget (Level 2) - Jetzt verbinden

24.05.2012, aktualisiert 07.06.2012, 4308 Aufrufe, 5 Kommentare

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
Mitglied: EvilMoe
24.05.2012, aktualisiert um 15:49 Uhr
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).
01.
SELECT MIN(gebuchtvon) as von, MAX(gebuchtbis) as bis FROM fahrzeuge WHERE fahrzeugid = 1;
Müsste dann deine gewünschten 8 und 18 Uhr liefern.

Gruß
Bitte warten ..
Mitglied: iceget
24.05.2012 um 16:34 Uhr
Hallo, danke für Antwort,

ich glaub ich hab das etwas falsch erklärt.

Ich versuch das nochmal:
In meiner WebApplikation habe ich einen Kalender, wo zuerst das zu buchende Datum ausgewählt wird.
Danach "neues Fahrzeug buchen",

und hier würde ich mir nun gerne nicht die gebuchten Fahrzeuge anzeigen lassen (wie in deinem Beispiel) sondern wie folgt:

Verfügbare Fahrzeuge (aktuelle augewähltes Datum (Buchungszeitraum 08:00 Uhr - 17:00 Uhr)):

Fahrzeug 1 verfügbar:
08:00 Uhr - 09:00 Uhr
10:00 Uhr - 11:00 Uhr
13:00 Uhr - 15:00 Uhr

Fahrzeug 2 verfügbar:
10:00 Uhr - 15:00 Uhr

(Diese Information sollte nicht angezeigt werden, jedoch habe ich das bisher schon erreicht, das mir die WebApplikation das anzeigt):
Fahrzeug 1 gebucht von 24.05.2012 09:00 Uhr - 10:00 Uhr
Fahrzeug 1 gebucht von 24.05.2012 11:00 Uhr - 13:00 Uhr
Fahrzeug 1 gebucht von 24.05.2012 15:00 Uhr - 17:00 Uhr

Fahrzeug 2 gebucht von 24.05.2012 08:00 Uhr - 10:00 Uhr
Fahrzeug 2 gebucht von 24.05.2012 15:00 Uhr - 17:00 Uhr

Also ich möchte nicht die zweite Ausgabe in meiner WebApp haben, sondern die Erste.
Ich schaffe das irgendwie nicht.

Das Timestamp vom ausgewähltem Datum von 08:00 Uhr bis 17:00 Uhr habe ich ja, ich weiß aber nicht wie ich die erste Ausgabe zusammen bringe

Kannst Du mir helfen?

Danke!!

lg iceget
Bitte warten ..
Mitglied: EvilMoe
24.05.2012, aktualisiert um 16:55 Uhr
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
01.
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)
01.
$start = 00:00; 
02.
// Die Schleife liefert alle Ergebnisse vom SQL Befehl 
03.
while( $row = mysql_fetch_object() ) 
04.
05.
   // Berücksichtige jetzt nicht den Timestapm umzuwandeln in eine Uhrzeit 
06.
   echo $start . "Uhr - " . $row->buchungAnfang . "Uhr <br/>\n"
07.
   $start = $row->buchungEnde; 
08.
}
Das müsste es eigentlich schon gewesen sein wenn ich bei der wärme nicht etwas total vergessen habe
Bitte warten ..
Mitglied: nxclass
25.05.2012, aktualisiert um 22:37 Uhr
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:
01.
8:00 
02.
9:00 
03.
10:00 
04.
... 
05.
16:00 
06.
17:00 
07.
18:00
nach dem LEFT JOIN:
01.
8:00 Fahrzeug1 Fahrzeug2 
02.
9:00 Fahrzeug1 Fahrzeug2 
03.
10:00 NULL NULL 
04.
... 
05.
16:00 Fahrzeug1 Fahrzeug2 
06.
17:00 Fahrzeug1 Fahrzeug2 
07.
18:00 NULL NULL
.. jetzt kannst du einfach auf IS NULL prüfen.

EDIT: je nachdem ob du Stündlich oder viertelstündlich vermietest - diese "Reihe" kann man auch dyn. als temp. Tabelle erzeugen
Bitte warten ..
Mitglied: iceget
30.05.2012 um 20:45 Uhr
Vielen Dank, damit hab ichs nun geschafft!

DANKE auch für alle Antworten!


Glg Markus
Bitte warten ..
Ähnliche Inhalte
PHP
Suchfeld mit Abfrage auf eine MySQL-Datenbank
gelöst Frage von SaschaRDPHP6 Kommentare

Hallo zusammen, ich steh mal wieder auf dem Schlauch. Bin dabei ein Suchfeld auf die Webseite zu bringen. Jedoch ...

Datenbanken
MySQL - Separate Config für Datenbanken
Frage von EinTypDatenbanken2 Kommentare

Hallo Community, ich habe einen MySQL-Server und habe mich letztens an einer Eigenschaft von InnoDB gestört: Das hochzählen der ...

PHP
PHP MySQL Abfrage aus Datenbank
Frage von Lost144PHP12 Kommentare

Hallo, Ich habe in einer Datenbank daten über VM's stehen. Angaben wie hostname,adresse, serverat usw. Wie kann ich in ...

Datenbanken
Login Probleme in mysql Datenbank
gelöst Frage von bigbootykillaDatenbanken2 Kommentare

Hi, ich habe hier eine Datenbank auf einer Ubuntu Kiste. Wenn ich mich versuche mit Code: einzuloggen bekomme ich ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 8 StundenWindows 101 Kommentar

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 9 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte16 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server16 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server12 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...