3

我在 mysql 中有一个包含开始和结束日期的表。这些开始和结束日期适用于预订酒店的时间。我需要做的是显示一个日历,显示已预订的日期和当月可用的日期。我如何知道当月的预订日期?我可以循环浏览当月的每一天,但这意味着 30 或 31 个查询,是否有更好、更优化的方法来找出当月预订的日期,以便我可以在日历上对日期进行颜色编码?

表结构是这样的:

hotelid 整数(11)

开始日期(日期)

结束日期(日期)

查询请求:

SELECT * FROM hotel_book WHERE hotelid = 1 AND DATE_FORMAT(startdate,'%Y-%m') >= '2012-08' AND DATE_FORMAT(enddate,'%Y-%m') <= '2012-08'

我确定我可以通过它 2012-08-01 和 2012-08-31 所以我不会处理每张支票的日期格式。但仅用于示例目的。

4

3 回答 3

2

另一种方法是让您的日历接受开始和结束日期,并呈现在日历逻辑中预订的每一天。如果日历使用 javascript 而不是 PHP 或 MySQL,对您的服务器的影响将是最小的。无论哪种方式,您最终都会循环,这仅取决于您希望在哪里发生。

于 2012-08-05T15:42:35.723 回答
0

所以首先获取酒店ID。然后进行查询以获取与该酒店 ID 相关的所有开始日期和结束日期。我建议你有第二个字段来计算差异:

如果有人预订了第 1 到第 3,那么也预订了第 2,因此您必须创建一个函数来计算差异,然后输出“中间”字段。因此,它必须首先获取开始编号,然后每次添加 +1 天,直到结束日期。所以它最终会像 array(1,2,3)

然后,您可以获取此信息并将其放入 jquery 或 ajax 日历的预定数组中(网上有很多可用的)。大概一旦预订了日期,就不能再次预订,否则您将有重复的 1,2,3 值 - 所以我猜酒店只有一个房间可用或其他东西。

于 2012-08-05T15:56:00.063 回答
0

这是获取所需日期的代码。您将能够在日历上显示它们的逻辑。请注意,我使用自定义类进行数据库选择。

$id=$_POST['id'];
$days=$db->select("reservations","room_id=".$id);
$listofdays=array();
foreach ($days $day) {
$start=$day['start'];
$end=$day['end'];
$liste=array(); //This array will be filled with dates between start and end
$liste=date_range($start, $end, $step = '+1 day', $output_format = 'm-d-Y'     );
foreach ($liste as $key => $list) {
$listofdays[] = $list;

}
}

//date_range函数如下:

    function date_range($first, $last, $step = '+1 day', $output_format = 'm/d/Y' ) {

$dates = array();
$current = strtotime($first);
$last = strtotime($last);

while( $current <= $last ) {

    $dates[] = date($output_format, $current);
    $current = strtotime($step, $current);
}

return $dates;

};

于 2015-04-14T15:17:12.483 回答