我正在构建一个系统,用户必须选择一段时间available
,然后选择另一个用户reserves
。每个活动的设定时间为20分钟,我希望被保留的人在日历中的不同日期一次性地available
时间排列available
小时。
我无法决定如何在数据库中简单地表示这一点,我目前的想法是让X
表成为用户的FK。当他们从TIME A
到TIME B
选择一个X * 3
小时的块时,它会在数据库中创建slots
行,可用时间为20分钟reserves
。
如果用户reservation
其中一个广告位,则会删除可用行,并创建另一个select * from my_table order by case when position('id' in sortorder) > 0 then id end,
case when position('fi' in sortorder) > 0 then fi end,
case when position('serial' in sortorder) > 0 then serial end
行,其中包含两个不同用户的FK。
有没有更简单的方法来表示这个?好像它会在db中创建大量不必要的行...
答案 0 :(得分:0)
存储它的简单方法?检查/分配预订的简单方法?两者都不容易;两者都变得混乱。
这是另一种方式。
BIGINT UNSIGNED
可以容纳64位,每个20分钟一个插槽,每天21小时。 (如果您需要跨越所有24小时,这将无效。)
运营商&
和|
以及<<
可用于构建预订区块,检查等等。
(1 << 14) - (1 << 9)
将打开6个连续位 - 代表2个小时。它是十六进制3F00
- 请参阅SELECT (1 << 14) - (1 << 8);
。
(this & that) != 0 -- check for any overlap
等