PC Reservation

simu_g

Grünschnabel
Hi

Wir machen gerade ein reservationssystem mit PHP & MySQL. Nun möchten wir, dass bei jedem Tag angezeig wird, welche Plätze noch frei sind! ($date ist die PHP variable mit dem Datum)

Dies sollte mit folgender SQL Code geschehen:
PHP:
SELECT pc.PC_ID FROM pc, reservation WHERE reservation.datum = '$date' AND ... ?";

Die zwei SQL Tabellen:
pc
PC_ID
RAM
CPU
usw.

und

reservation
res_id
datum
PC_ID

nun haben wir schon vieles ausprobiert nach WHERE, aber nichts hat geklappt... :(

Es würde, wenn man es in worten sagt, ja so heissen:
Wähle alle PCs aus, deren ID am $date (php variable) noch nicht in der tabelle reservation stehen!

---------------------------------------------------------------------------------

So, ich hoffe, jemand checkt das, was ich geschrieben habe, ansonsten fragt nur

mfg simu
 
Hi!
In welchem Format liegt denn das Reservierungsdatum vor?
Ich vermute mal, dass das Systemdatum, mit dem Ihr vergleichen wollt als Timestamp vorliegt.
Separiert den Tag und Monat aus dem Timestamp und vergleich die miteinander.
 
Das Konstrukt nennt sich Outer Join..

Code:
SELECT pc.PC_ID 
FROM pc LEFT JOIN reservation ON pc.PC_ID =  reservation.PC_ID
WHERE reservation.datum = '$date' AND reservation.PC_ID is Null
In manchen Datenbanken gibt es dafür ein extra Konstrukt.
In meinem Beispiel mache ich eine Left Join, dh. ich will alle PC_ID mit der Zuordnung zu reservation egal, ob Resevierungen bestehen oder nicht.
Ist keine entsprechende Reservierung vorhanden, ist der Wert für die PC_ID der Tabelle unbestimmt, also Datenbank NULL.
Daher kann man darauf einschränken :).
 
@slizzzer:

Das Format wäre: JJJJMMDD
Aber das ist nicht das problem, das mit dem vergleichen funktioniert schon, aber wir schaffen es nicht, nur die freien PCs anzuzeigen, sondern gleich alle! Wir wissen nicht, wei man mit SQL sagern kann, es soll von der Tabelle "pc" nur die PCs auswählen, welche am gefragten Datum noch keinen eintrag haben in der Tabelle "reservation"!

Beispiel: Datum 20041225 (25 Dez 2004)

Tabelle "pc":
PC_ID Eigenschaften
1 .....
2 .....
3 .....

Tabelle "reservation":
res_id datum PC_ID
1 20041225 3
2 20041229 2
3 20041225 2
... ............. ...


Nun soll es ja die freien pcs am 25 anzeigen, also in diesem oben erwähnten Fall:
Den en PC1!


Die frage ist nun, wie man sagen kann, dass es nun alle PCs anzeigen will, ausser den PCs, die am gefragten Datum schon reserviert sind in der Tabelle "reservation"!

@mage:
deine lösung ist eigentlich gut, aber in der tabelle reservation stehen nur die reservationen, wenn ein pc an einem datum nicht reserviert ist, dann steht dieser halt auch nicht in der tabelle reservation! deshalb ist da, was du geschrieben hast gut, um alle reservierten PCs auszuwählen (wir hatten dafür schon ne abfrage, aber deine ist wesentlich schöner als unsere)
 
Zuletzt bearbeitet:
Nein, genau umgekehrt meine Abfrage wählt nur die aus, die keinen zugehörigen Datensatz in der Tabelle reservation besitzen.
Beachte das "reservation.PC_ID is Null" in der Where Bedingung.
Wenn du diese Bedingung weglässt bekommst du alle PCs.
Wenn du nur die Reservierungen an einem Tag haben möchtest brauchst du diese Abfrage:
Code:
SELECT pc.PC_ID 
FROM pc INNER JOIN reservation ON pc.PC_ID =  reservation.PC_ID
WHERE reservation.datum = '$date' AND reservation.PC_ID is Null

Wenns keinen INNER JOIN gibt, dann probier mal den nur JOIN oder EQUI JOIN, sorry arbeite viel mit Access bzw. MS SQL, hab die MySQL Syntax nicht so im Kopf.
 
Zurück