หลังจากนั้น ถ้าหาคำตอบได้
- ไปหาความหมายของ WHERE NOT IN ก่อนมันคืออะไร
- ไปหาความหมายของ Between
ถ้าเข้าใจความหมาย 2 ตัวนี้ นำมา Dev เข้าด้วยกันแล้วจะแสดงผล
create table bookCarPark (
id int identity(1,1) ,
idbook int,
idperson int,
checkIn date,
CheckOut Date
)
-- truncate table bookCarPark
insert into bookCarPark values (2,3,'2020-01-12','2020-01-15'),(2,3,'2020-01-18','2020-01-19')
select * from bookCarPark
declare @a date = '2020-01-16', @b date ='2020-01-17'
select 'can book between '+ cast(@a as varchar(10)) + ' and ' + cast(@b as varchar(10))
where not exists ( select 1 from bookCarPark a where
(@a BETWEEN a.checkin AND a.checkout)
OR (@b BETWEEN a.checkin AND a.checkout)
OR (a.checkin BETWEEN @a AND @b)
OR (a.checkout BETWEEN @a AND @b)
)
ผมลองทำได้แล้วนะครับ โดยใช้ NOT IN และ BETWEEN แบบที่คุณ Genesis™ แนะนำมา
อันนี้ผมทำแบบ ระบค่ามาจาก input แล้วอยากจะแชร์ให้เพื่อนๆ พี่ๆ น้องๆ ที่กำลังทำโปรเจคอะไรสักอย่างแนวนี้และนำไปประยุกต์
Code (PHP)
SELECT * FROM parking WHERE idChannel NOT IN
(SELECT idChannel FROM booking WHERE
(Checkin BETWEEN '".$_POST["checkin"]."' AND '".$_POST["checkout"]."') OR
(Checkout BETWEEN '".$_POST["checkin"]."' AND '".$_POST["checkout"]."'))";
// $_POST รับค่า date แบบ y/m/d