![](/img/trans.png)
[英]Programming eclipse plugin for searching file within a project (basic help needed)
[英]Logics of searching for “available hotel rooms” help needed
假设您有一个网站供用户搜索“用于出租的酒店客房”。
我不知道当前系统的逻辑如何工作,这就是为什么我问你们。
我目前有两个字段的形式:
Date available from: //example 2010-04-01 // 1st april 2010
Date available to: //example 2010-05-01 // 1st may 2010
然后提交!
这是我的问题:我的搜索引擎称为“ Solr”,它的搜索如下:
dateFrom:[$date_from TO *] AND dateTo:[* TO $date_to]
// $date_from and $date_to = the date inputted by the user in the html form
上面将搜索where $date_from TO infinite AND infinite TO $date_to.
所有匹配where $date_from TO infinite AND infinite TO $date_to.
这个对吗? 我个人不这么认为...
这种逻辑如何在预订网站上起作用?
如果您需要更多输入,请告诉我! 谢谢
更新:
顺便说一句,只要用户指定“出租房”,他们就指定范围,例如从3月1日到4月1日。
又例如:假设我们有一个房间,该房间在4月1日至5月1日之间是免费的。
假设你店里当日期被预订了 ,而不是当他们是免费的,你可以,每一天的日期范围,发现在这一天的房间免费的名单(通过利用房间的总清单,减去室,有一个预订在那一天)。 然后,只需获取此列表并将其过滤到该范围内每天都有空的房间即可。
给出的逻辑看起来确实正确,尽管这是一种奇怪的表示方式。
$ date_from至TO无限等于!someDate.before($ date_from)。 同样,$ infinite TO date_to ==!someDate.after($ date_to)。
因此,您正在寻找每个房间的预订,以确保在4月1日至5月1日(含)之间没有预订。 如果在这些日期之间有预订,该房间不可用。
老师不是必须使用这个例子来说服学生,他们确实需要学习如何在应用程序编程中应用二进制(按位)运算吗?
喜欢:
for ($day=$firstday; $day<$lastday; $day++) {
$testbooking=++$testbooking<<1;
foreach ($rooms as $id=>$room) {
$avail[$id]=($avail[$id] + (has_booking($id) ? 0 : 1)) <<1;
}
}
foreach ($avail as $id=>$free_pattern) {
if ($free_pattern & $testbooking == $testbooking) {
return $id;
}
}
return false;
吓人-但是某些DBMS优化器如何设法解决它。
C。
也许有一张桌子每天都有免费房间的数量。
DATE | FREE
======+=====
10.03 | 10
11.03 | 7
12.03 | 6
...
要检查请求,只需选择该时间段内的最小空房间数,然后将其与所请求的房间数进行比较即可。
select min(FREE) from TABLE where DATE >= DATE_FROM and DATE < DATE_TO
(对不起,我不知道“ Solr”)
之所以如此,是因为通常不需要与预订相关的具体房间。
房间将在登记入住时分配 。
创建,确认或取消预订时,必须更新该表。
上面的逻辑几乎是正确的,但是诀窍在于数据库不应该存储房间,而是一个房间的空闲时间跨度,因为每个房间可以有多个跨度,因此您的主表可能每个房间包含多个条目
例如,假设您在表中
room start_avail end_avail
1 Jan 1 Mar 1
2 Feb 15 Mar 15
有人预定2月2日至15日的房间1,现在您已经
1 Jan 1 Feb 1
1 Feb 16 Mar 1
2 Feb 15 Mar 15
收到请求时,您基本上将其与数据库中的每个空闲时间进行比较,并找到一个在请求的开始日期或之前开始,并在请求的结束日期或之后结束的时间。 预订后,您可以从数据库中删除时间跨度,然后插入未使用的剩余时间跨度(可以为0 1或2,具体取决于预订的适合程度。
如果您打算向用户显示所有可能的房间并让他们选择一个房间,那么您就完成了。 但是,如果您可以控制选择哪个房间,则需要考虑一种启发式方法,以最佳地利用您的房间资源。 例如,“最合适”的启发式方法总是会选择没有预定最少额外时间的房间,因此1天的预订更喜欢2天的免费跨度,而不是在两周的中间花一天的时间来削减分成两个自由跨度。 否则,假设3月15日有一个空闲的房间,3月中有一个空闲的房间。 如果有预订,则可以使用任何一个房间。 但是接下来假设有人来该站点寻找3月整个房间。 如果第一笔预订使用的是第二间客房,那么您将无法满足要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.