首先用一個數組記錄時間段及每個時間段最多可以預約的人數,或者用數據表也可以。
例如每個時間段只能預約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分鐘不能取消,這樣較好。大概思路是這樣。

解决方案 »

  1.   

    如果星期一和星期日等的可以預約時間不同,那$t這個數組則再分多一層做星期的key。如果是這樣建議做成數據表,方便管理。$t = array(
       'MON' => array(
         array('08:00', '09:00', 20),
          ....
         .....
         array('17:00', '18:00', 20),
      ),
      'TUE' => array(  )
    );
      

  2.   

    先设计数据库,表doctors(医生),表order(预约),表work(排班)
    每次生成预约号,先去检索排班表,排班表里面如果当天的没有创建,先创建。
    排班额外建表,就可以手动修改设置。楼上的那种虽然有道理,但是你不能保证那个医生那一天那个点就一定会上班,可能遇到某些情况不上班或者有事耽误
    所以不能写死在程序中。
      

  3.   

    既然复杂就用数据表来做,方便管理数据表结构如下:doctor 表,记录医生信息
    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流程就是这样,应该很明白了吧。
      

  4.   

    你那个方法我可以理解成这样的吗?我做成这样的如图:,这个是7天自动循环的,每天的时间段和人数自定义,但是这个SQL语句该怎么写呢?麻烦你了,最早那个思路客户不满意,菲的弄成这个得
      

  5.   

    如果你的输入框命名成这样的形式:
    时段1<input type=text name='t[2014-06-29][s1]'>
    时段2<input type=text name='t[2014-06-29][s2]'>
    提交后不就都对应上了吗?如果你是用 mysqli 或 pdo 扩展的话,绑定一下参数,就可循环插入,没有什么开销
    如果是用 mysql 就组装一下指令串,也不是什么难事
      

  6.   


    各位给帮忙看下这个事怎么回事,http://jcy.xys.gov.cn/已经放到服务器了,怎么还是本地路径呢,这个解决了我结贴给分,拖得时间太长了,对不起大家了。。
      

  7.   

    圖片你在模板中寫死吧。http://localhost/xyjcy_network/templates/default/images/xjweibo.jpg
      

  8.   


    你究竟想要做什么?把思路先理清楚了!
    你不是“预约”吗?怎么可能每周是一样的?
    如果我约在明天,难道明天的明天也有效吗?日期当然是定死的!
    版主,请教下
    网站上的doc文件打开时也不提示是否下载或者打开,直接打开就是乱码,不知道这是怎么回事呢?