我现在正在创建一个新的预订系统,私人房间的一部分已经完成,我现在已成为宿舍的一部分(共享房间)。
系统的工作原理如下:
插入即将到来的一天+离开一天+宿舍里有多少人
如果是免费房间,系统会检查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个。)
现在我想做下一件事: 如果有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个人。例如。
答案 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时间戳可以帮助您列出未来的日期。