首先用一個數組記錄時間段及每個時間段最多可以預約的人數,或者用數據表也可以。
例如每個時間段只能預約20個人。
$t = array(
array('08:00', '09:00', 20),
....
.....
array('17:00', '18:00', 20),
);然後,用一張表記錄預約人數,大概字段如下
id 自增
mid 用戶id 或什麼唯一身份驗證的東西,或email也可以,用來檢查是否重複預約用。
date 日期
t 時間段標識,用數組標識也可
num 預約人數當有用戶要預約,先判斷是否在允許預約時間段內,如果是,再判斷,該時間段內是否已經預約滿,如未滿則增加一條記錄。例如有一個用戶在8:00-9:00 這個時間段預約,可以這樣判斷。
select num from table where date='2014-06-10' and t=0;如返回的num小於 20,則insert。如果要加上取消預約功能,可以也設一個取消預約限期,起碼在9:00前10分鐘不能取消,這樣較好。大概思路是這樣。
例如每個時間段只能預約20個人。
$t = array(
array('08:00', '09:00', 20),
....
.....
array('17:00', '18:00', 20),
);然後,用一張表記錄預約人數,大概字段如下
id 自增
mid 用戶id 或什麼唯一身份驗證的東西,或email也可以,用來檢查是否重複預約用。
date 日期
t 時間段標識,用數組標識也可
num 預約人數當有用戶要預約,先判斷是否在允許預約時間段內,如果是,再判斷,該時間段內是否已經預約滿,如未滿則增加一條記錄。例如有一個用戶在8:00-9:00 這個時間段預約,可以這樣判斷。
select num from table where date='2014-06-10' and t=0;如返回的num小於 20,則insert。如果要加上取消預約功能,可以也設一個取消預約限期,起碼在9:00前10分鐘不能取消,這樣較好。大概思路是這樣。
'MON' => array(
array('08:00', '09:00', 20),
....
.....
array('17:00', '18:00', 20),
),
'TUE' => array( )
);
每次生成预约号,先去检索排班表,排班表里面如果当天的没有创建,先创建。
排班额外建表,就可以手动修改设置。楼上的那种虽然有道理,但是你不能保证那个医生那一天那个点就一定会上班,可能遇到某些情况不上班或者有事耽误
所以不能写死在程序中。
doctor_id 医生id PK
name 医生名称timeline 表,记录每个医生每天每个时段的能预约的信息,这个需要每隔一段时间做一次新增和删除,新增加新日期预约时间,删除过期的.星期没有用了,因为直接用日期来定比较好。
tid timeline id PK
doctor_id 医生id FK
date 日期
quota 允许预约的人数
starttime 时段开始语 例8:00
endtime 时段结束 例9:00
status 该时段是否允许预约 0 否 1允许order 预约表,记录用户预约的情况
order_id 预约id PK
userid 用户id -> 会员系统这个你自己想 FK
tid 预约了的时段id FK
addtime 预约时间流程:
首先先输入doctor 和 timeline 数据,如下共有两个医生
doctor_id name
1 d1
2 d2在2014-06-11这天的班表,doctor1别8个时间段全满,doctor2 则只有6个时间段需要工作
tid doctor_id date quota starttime endtime status
1 1 2014-06-11 10 08:00 09:00 1
2 1 2014-06-11 10 09:00 10:00 1
3 1 2014-06-11 10 10:00 11:00 1
4 1 2014-06-11 12 11:00 12:00 1
5 1 2014-06-11 12 14:00 15:00 1
6 1 2014-06-11 8 15:00 16:00 1
7 1 2014-06-11 10 16:00 17:00 1
8 1 2014-06-11 5 17:00 18:00 1
9 2 2014-06-11 10 08:00 09:00 1
10 2 2014-06-11 10 09:00 10:00 1
11 2 2014-06-11 10 10:00 11:00 1
12 2 2014-06-11 12 14:00 15:00 1
13 2 2014-06-11 10 16:00 17:00 1
14 2 2014-06-11 5 17:00 18:00 1
预约
第一位用户useid=1 要预约 2014-06-11 11:00~12:00 doctor1
首先判断timeline 中 doctor_id=1 date=2014-06-11 starttime=11:00 endtie=12:00 quota>0的记录是否存在
如果不存在,返回提示没有预约的时段或名额已满
如果存在
1。在order表新增一条记录
order_id userid tid addtime
1 1 4 2014-06-09 10:29:29
2.将timeline tid=4 的 quota-1,那记录就会变成4 1 2014-06-11 11 11:00 12:00 1流程就是这样,应该很明白了吧。
时段1<input type=text name='t[2014-06-29][s1]'>
时段2<input type=text name='t[2014-06-29][s2]'>
提交后不就都对应上了吗?如果你是用 mysqli 或 pdo 扩展的话,绑定一下参数,就可循环插入,没有什么开销
如果是用 mysql 就组装一下指令串,也不是什么难事
各位给帮忙看下这个事怎么回事,http://jcy.xys.gov.cn/已经放到服务器了,怎么还是本地路径呢,这个解决了我结贴给分,拖得时间太长了,对不起大家了。。
你究竟想要做什么?把思路先理清楚了!
你不是“预约”吗?怎么可能每周是一样的?
如果我约在明天,难道明天的明天也有效吗?日期当然是定死的!
版主,请教下
网站上的doc文件打开时也不提示是否下载或者打开,直接打开就是乱码,不知道这是怎么回事呢?