我对sql不是很好,但我认为我想要的应该是可能的,我只是不知道该怎么做。
我有一个网站,允许用户列出他们的青年旅舍。然后潜在客户可以浏览这些旅馆并进行预订。
表:
hostels
-------
max_guests
bookings
-------
hostel_id
check_in
check_out
guests
当用户搜索网站时,我允许他们选择入住日期、退房日期、地名和客人数量。请注意,每间旅馆都有最多可容纳的客人人数,例如 20 人。
所以说之前在为搜索选择的日期期间在特定的旅馆预订了 8 人,那么我需要知道特定旅馆在这些日期之间可以容纳的最大客人人数现在是 12,它只会出现在搜索 <= 12 位客人时。
同样,如果该旅馆有更多预订并且已达到最大容量,那么它根本不应该出现在搜索中。
目前我有一个查询,它获取了所有的旅馆,但是如果在所选日期之间有任何旅馆的预订,那么它将被排除在结果之外。我希望能够在所选日期内获得每家旅馆的所有预订,计算预订的客人人数,如果从旅馆的 max_guests 中减去该数字得出的结果低于客人人数在搜索中指定,然后将其从结果中排除。
目前我的查询看起来像:
SELECT DISTINCT `Hostel`.`id`, `Hostel`.*, `Hostel`.`id`
FROM `hostelsdatabase`.`hostels` AS `Hostel`
LEFT JOIN `hostelsdatabase`.`bookings` AS `bookings` ON (`bookings`.`hostel_id` = `Hostel`.`id`)
LEFT JOIN `hostelsdatabase`.`users` AS `User` ON (`Hostel`.`user_id` = `User`.`id`)
WHERE ((`Hostel`.`address_one` LIKE '%london%') OR (`Hostel`.`address_two` LIKE '%london%') OR (`Hostel`.`city` LIKE '%london%'))
AND `Hostel`.`maxguests` >= 4
AND NOT EXISTS (SELECT * FROM bookings WHERE `bookings`.`hostel_id` = `Hostel`.`id` AND NOT('2013-07-31' > `bookings`.`checkout` OR '2013-08-02' < `bookings`.`checkin`))
LIMIT 10
谁能告诉我如何修改该查询以使其满足我的需要?