我对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
任何人都可以告诉我如何修改该查询以使其完成我需要的工作吗?