酒店订房系统:如何使用mysql来确定一个时间段内的房间都是可订的
2014-04-25 10:56
225 查看
需要解决的问题:
假设一个用户选择了日期范围来进行订房,例如:2014-04-25至2014-04-30 ,那么现在问题就出现,你必须要确认在这个时间段内某个房间是否都是有房间的,如果没有那么当然不能订。
我的解决思路是:
1.获取到用户的check_in_date&check_out_date,然后计算出需要住宿多少天;
2.查询在这个时间段内,对应某个酒店所有的所有房间类型,并且房间数大于0,以房间id(room_id)分组的记录数各是多少,并获取room_id(具体MYSQL语句:"SELECT count(*) as have_days,room_id FROM zroom_day_price WHERE today>=? AND today<? AND room_id IN (".$room_ids.") AND rooms>0 GROUP BY room_id");
3.使用php程式来比较1(住宿天数)&2(对应时间段中某个房间id的记录数)是否相等。相等,则将该房间的id保存到一个预先定义好的数组中,最后在循环结束后,将该数组返回,并根据该房间id数组取出对应的房间detail information。
每天房间价格表(zroom_day_price)结构(structure)
ps截图:
View Code
房间资料表(zroom)
the structure of zroom table
ps: zroom structure
假设一个用户选择了日期范围来进行订房,例如:2014-04-25至2014-04-30 ,那么现在问题就出现,你必须要确认在这个时间段内某个房间是否都是有房间的,如果没有那么当然不能订。
我的解决思路是:
1.获取到用户的check_in_date&check_out_date,然后计算出需要住宿多少天;
2.查询在这个时间段内,对应某个酒店所有的所有房间类型,并且房间数大于0,以房间id(room_id)分组的记录数各是多少,并获取room_id(具体MYSQL语句:"SELECT count(*) as have_days,room_id FROM zroom_day_price WHERE today>=? AND today<? AND room_id IN (".$room_ids.") AND rooms>0 GROUP BY room_id");
3.使用php程式来比较1(住宿天数)&2(对应时间段中某个房间id的记录数)是否相等。相等,则将该房间的id保存到一个预先定义好的数组中,最后在循环结束后,将该数组返回,并根据该房间id数组取出对应的房间detail information。
每天房间价格表(zroom_day_price)结构(structure)
room_day_price_id | room_id | unit | price | rooms | bookedrooms | today | adminid | createdate |
int(11) primary key auto_increment | int(11) | varchar(20) | varchar(20) | int(11) default 0 | int(11) default 0 | varchar(20) | int(11) | varchar(20) |
<?php function filter_rooms($check_in,$check_out,$room_ids){ $departure_days = (strtotime($check_out) - strtotime($check_in))/(24*3600); $sql = "SELECT count(*) as have_days,room_id FROM zroom_day_price WHERE today>=? AND today<? AND room_id IN (".$room_ids.") AND rooms>0 GROUP BY room_id"; //SELECT COUNT( * ) FROM zroom_day_price WHERE today >= '2014-04-27' AND today <= '2014-04-30' AND room_id IN ( 266, 267, 268, 269, 270 ) AND rooms >0 GROUP BY room_id $room_ids_period = array(); $data = array($check_in,$check_out); $count = SQL_select($sql,$data); $length = count($count); foreach($count as $value){ if($value['have_days'] == $departure_days){ $room_ids_period[] = $value['room_id']; } } if($room_ids_period){ return implode(',',$room_ids_period); }else{return '';} } ?>
View Code
房间资料表(zroom)
room_id | title_chs | title_cht | title_eng | stype | hotel_id | pri | createdate | lastdate | summary_chs | smummary_cht | summary_eng | price | extrabed | condition_chs | condition_cht | condition_eng | maxrooms | logourl | corperate |
int(10)UNSIGNEDPRIMARYKEYAUTO_INCREMENT | varcahr(50) | varchar(50) | varchar(50) | smallint(5) | int(10) | smallint(5) | varchar(20) | varchar(20) | medium text | medium text | mediun text | varchar(45) | int(11) | varchar(1000) | varchar(1000) | varchar(1000) | int(10) | varchar(200) | tinyint(1) |
![](http://images.cnitblog.com/i/603668/201404/251054169517710.png)
相关文章推荐
- 如何在cocos2d-x中使用ECS(实体-组件-系统)架构方法开发一个游戏?
- 货币系统:如何用不同面值货币来构造一个确定的钱数?
- Linux系统中,有两个文件file1和file2,每个文件的每一行都是#UUID,其中的每一UUID表示一个号。要找出在file1中有而在file2中没有的UUID,使用cat,sort,uniq三个命令如何实现
- 如何解决Mysql "发生系统错误2,找不到指定的文件" 的问题(第一次安装使用)
- mysql中如何将查询结果的多个记录中的指定字段放到一个二维数组中,以及在in子句中使用数组
- 在 MySQL Workbench 中如何可视的建立 MySQL 物理数据模型,并使用它来创建一个 MySQL 数据库
- springsecurity中如何做到多个用户不能使用同一个账号同时登陆系统
- 如何开发一个异常检测系统:使用什么特征变量(features)来构建异常检测算法
- 如何确定一个IAR工程所使用的IAR版本
- 在mysql中如何使用一个表中的数据去更新另外一个表的数据
- [km] 如何判断一个直播系统是否使用的是RTMP
- 如何使用Openfiler为VMware ESX设置一个免费的iSCSI或NAS储存系统
- 重装系统后 如何使用之前mysql数据
- 多个分布式系统如何共享使用一个固定公网IP
- 重装系统后 如何使用之前mysql数据
- 如何使用jQuery+PHP+MySQL来实现一个在线测试项目
- 电脑使用小技巧--如何把一个文件(夹)变成一个隐藏受系统保护的系统文件(夹)!
- 如何在cocos2d-x中使用ECS(实体-组件-系统)架构方法开发一个游戏?
- 如何在 Linux 上使用 SSHfs 挂载一个远程文件系统
- Mysql:命令选项、配置选项、(全局、会话)系统变量、状态变量:如何使用系统变量?