预订系统PHP + SQL的大问题

时间:2010-08-05 08:42:28

标签: php sql

我现在正在创建一个新的预订系统,私人房间的一部分已经完成,我现在已成为宿舍的一部分(共享房间)。

系统的工作原理如下:

  1. 插入即将到来的一天+离开一天+宿舍里有多少人

  2. 如果是免费房间,系统会检查DB(MYSQL)。 现在怎么检查?在DB中有日期的约会 - 一个约会是人。例如,我们有一个宿舍与这些日期:05 / 08,05 / 08,05 / 08,05 / 08,06 / 08,06 / 08,06 / 08,06 / 08,07 / 08,07 / 08, 07 / 08,07 / 08-所以宿舍有5人在05-07 / 08。例如,如果这个房间有10个人有4个中的10个。现在,如果你插入7个人,你没有地方。 (它将是10个中的11个。)

  3. 系统返回可用房间。
  4. 现在我想做下一件事: 如果有2个宿舍。所有这些都放在10个人身上。所有这些人都有8人10人。现在有4个人想要注册..它不会给他们因为它检查宿舍宿舍..我想这样做系统会计算出免费的地方(有10-8 + 10-8 = 2个宿舍中的4个)。 有想法吗?

    我的英语不太好我希望你能理解我, 非常感谢你!

    修改

    当我在数据库中添加宿舍时:

    ID | room_type|            persons                   | dates
    ------------------------------------------------------------------------
    X  |  Dorm    |How many the dorm contain. not change.| of persons coming
    

    如果你有5个相同的日期=这个日期宿舍里有5个人。例如。

1 个答案:

答案 0 :(得分:0)

好的,所以我输入内存不足,所以可能需要进行一些微调,但它应该作为指导。希望它有所帮助。

1)首先,让我们创建一个临时表,存储每个日期任何给定房间的所有ocuppied插槽:

CREATE TEMPORARY TABLE room_availability
SELECT ID, DISTINCT dates, COUNT(dates) as full_slots FROM table 
WHERE UNIX_TIMESTAMP(CAST(dates AS DATE)) - UNIX_TIMESTAMP(NOW()) > 0
GROUP BY dates ORDER BY ID;

2)让我们获得任何房间的所有可用插槽:

SELECT table.*, table.persons - room_availability.full_slots as free_slots
FROM table INNER JOIN room_availability ON table.ID = room_availability.ID
where table.persons - room_availability.full_slots > 0

3)最后,摆脱临时表,你就完成了

PS:unix时间戳可以帮助您列出未来的日期。