2017-01-11 4 views
0

Jeder Benutzer hat mehrere Buchungen gegen sie in einer Tabelle, ich muss die Benutzerdetails und die Buchungsdetails, wo der Beginn und Ende der Buchung nicht mit dem Datum der Benutzer überlappt bestanden.MySQL wählen, wo Timestamps nicht überlappen

Benutzer

id | name 
--------- 
1 | Ryan 
2 | Dave 

user_bookings

id | user_id | title   | start_date | end_date 
------------------------------------------------------ 
1 | 1  | Booking One | 1484133562 | 1484133562 
2 | 1  | Booking Two | 1484133562 | 1484133562 
3 | 2  | Booking Three | 1484133562 | 1484133562 

Der Benutzer Website kann für Benutzer suchen, die DONT Buchungen sie angeben, während der Zeiten haben. So könnten sie nach Daten suchen wie: 01/01/2017 bis 05/01/2017 und wenn user_id 1 eine Buchung während dieser Zeit hat, werden sie nicht in den Ergebnissen angezeigt.

ich eine Abfrage zur Zeit haben mag:

SELECT 
users.name, 
user_bookings.name 
FROM users 
JOIN user_bookings ON users.id = user_bookings.user_id 
WHERE NOT(('$start_date' <= user_bookings.start_date) AND (user_bookings.end_date <= '$end_date')) GROUP BY users.id; 

Antwort

0
SELECT users.name, user_bookings.name 
FROM users 
JOIN user_bookings ON users.id = user_bookings.user_id 
WHERE NOT ((DATE_FORMAT(user_bookings.start_date,'%m/%d/%Y') >= '$start_date' AND DATE_FORMAT(user_bookings.end_date,'%m/%d/%Y') <= '$end_date')) AND users.id = 1 
GROUP BY users.id;