2016-08-06 7 views
-2

Ich möchte alle Details aus der Tabelle Buchungen abrufen, wenn sie im Bereich der Gäste Check-in und Check-out Daten sind. Das von Ihnen gewählte Check-in-Datum ist 'new_date_in' und das Check-out-Datum ist 'new_date_out'.SQL-Abfrage Fehler

$SQL="SELECT * FROM bookings WHERE roomid = '$roomid' AND ((bookings.checkindate < '$new_date_in' AND bookings.checkoutdate >= '$new_date_in') 
      OR (bookings.checkindate < '$new_date_out' AND bookings.checkoutdate > '$new_date_out') 
      OR (bookings.checkindate >= '$new_date_in' AND bookings.checkoutdate <= '$new_date_out' )) ; 

enter image description here

Bur Problem ist, diese frühen Tage abrufen, die nicht im Bereich liegen.

Ex. Wenn Gast-ID ‚new_date_in' als 2016.09.25 und‚new_date_out‘als 2016.09.28 Platz wählen 3

Es gibt diese Ausgabe

534 
2016-09-08 
2016-09-10 
535 
2016-08-03 
2016-08-05 

Es sollte nicht als Ausgabe zurückgegeben werden. Bitte überprüfen Sie meine SQL-Abfrage und korrigieren Sie sie.

Vielen Dank.

+0

Für welche RDBMS ist das? Bitte fügen Sie ein Tag hinzu, um anzugeben, ob Sie 'mysql',' postgresql', 'sql-server',' oracle' oder 'db2' verwenden - oder etwas ganz anderes. –

Antwort

0

Funktioniert gut für mich. Ich bekomme damit null Ergebnisse:

CREATE TABLE bookings (
    bookingid int primary key not null, 
    checkindate date not null, 
    checkoutdate date not null, 
    roomid int not null, 
    guestid int not null, 
    qty int not null 
); 

insert into bookings (bookingid, checkindate, checkoutdate, roomid, guestid, qty) 
values 
    (524,'2016-08-01','2016-08-03',2,85,1), 
    (525,'2016-10-12','2016-10-15',3,86,1), 
    (526,'2016-07-23','2016-07-31',2,87,3), 
    (527,'2016-07-26','2016-07-28',1,88,1), 
    (533,'2016-07-28','2016-08-02',2,96,1), 
    (534,'2016-09-08','2016-09-10',3,97,1), 
    (535,'2016-08-03','2016-08-05',3,98,2); 

SELECT * 
FROM bookings 
WHERE roomid = 3 
    AND (
      (bookings.checkindate < '2016-09-25' AND bookings.checkoutdate >= '2016-09-25') 
     OR (bookings.checkindate < '2016-09-28' AND bookings.checkoutdate > '2016-09-28') 
     OR (bookings.checkindate >= '2016-09-25' AND bookings.checkoutdate <= '2016-09-28') 
    ) 

Scheint nicht ein SQL-Logikfehler zu sein. Damit bleiben folgende Probleme übrig:

  1. Datentyp Probleme. Wenn Sie keine vernünftigen Datentypen für Ihre Datenfelder verwenden, können Sie unerwartete Ergebnisse erhalten. Ich kann Ihre Tabellendefinition nicht sehen.
  2. Problem mit Zeichenfolge Verkettung in Ihrer Anwendung. Es gibt einen Grund, warum Sie Parameter verwenden sollten. Werfen Sie einen Blick auf den aktuellen Wert von $SQL, bevor es ausgeführt wird.
+0

Ok. Ich werde nachsehen. Danke für deine Mühe. –