2009-08-19 3 views
0

Ich erstelle eine Ausrüstungsreservierung (PHP/MySQL) für meine Schule.Ermitteln der Logik für MySQL Select - Reservierungssystem

Meine Datenbank sieht wie folgt aus: ‚nicht verfügbar‘

tblEvents: 
id 
start 
end 
equipID 


tblEquipment: 
    id 
    name 
    description 

Ich mag würde den besten Weg, wissen, um die Datenbank abzufragen, basierend auf einen Zeitparameter des Benutzers zu sehen, ob ein bestimmte Artikel ist

Zum Beispiel, wenn ich die folgenden Daten:

tblEvents: 
    id  start   end   equipID 
    1  1251312300 1251324000  1 

Und der Benutzer sendet die Abfrage, um zu sehen, suchen, wenn „EquipID“ 1 verfügbar ist, und sie setzen:

1251300300 als ihre Start und 1251524000 als ihr Ende.

Jede Hilfe, um das zu starten, wäre großartig. Vielen Dank.

+0

sind mehrtägige Auscheckvorgänge normal/erlaubt? Wenn ja, macht es die Aufgabe schwieriger, aber nicht unmöglich. –

Antwort

1

Ich bin nicht 100% sicher auf diesem, aber ich denke, diese Abfrage ziemlich nah dran sein sollte:

select * from tblEvents 
where (@starttime >= start && @starttime <= end) /* Starts while someone else has it */ 
or (@endtime >= start && @endtime <= end) /* Ends while someone else has it */ 
or (@startime <= start && @endtime >= end) /* Starts before & ends after someone else has it*/ 
and equipID = @equipID 

@starttime ersetzen, @endtime & @equipID mit der entsprechenden Ausrüstung ID und starten & Endzeiten vom Benutzer eingegeben. Wenn diese Abfrage keine Ergebnisse zurückgibt, sollten keine Zeitkonflikte auftreten.

Grundsätzlich wird nach diesen 3 Szenarien gesucht, wobei der * & Endzeitpunkt ist, die - nicht verwendete Zeit und die | seine sonst wird Zeit von jemandem benutzt wird:

-|||||*|||||------*------ 
------*--------|||*||||-- 
------*--|||||||--*------ 
+0

Schöne Illustration, danke! –

0
SELECT * FROM tblEvents 
WHERE NOW() > FROM_UNIXTIME(end)