按时间表按空闲时间匹配

时间:2013-02-26 21:35:56

标签: php mysql

我正在尝试构建一个带有表单部分的网站,该部分允许用户指定他们一周中哪些时段是免费的。 (例如:John Smith周二免费4-7,周三8-9免费)

然后我想运行一些服务器端代码,将具有相似时间块的用户配对在一起。

我想知道如何设计我的数据库以支持此功能以及哪种算法可以让我匹配类似的用户?

1 个答案:

答案 0 :(得分:2)

好的,我会尝试建立你的数据库结构。

我认为最好的方法是划分时间段,例如: 00:00 - 01:00,01:00 - 02:00等你把它们放在桌子上

ID | day    | timestart | timeend
1  | Monday | 00:00     | 01:00
2  | Monday | 01:00     | 02:00
.....................

请注意,所有列都是纯粹的,以便您知道您所引用的内容,但会话ID除外。

然后你有你的用户表

ID | username | email             | ...
1  | John     | john@example.com  | ...
.....................

然后你有另一张桌子,time_off或者......

    user_ID  | timeblock_ID
    1        | 2
    1        | 8
...............

您在user_ID和timeblock_ID上放置一个FOREIGN KEY以引用您的其他表

然后您可以通过以下方式查询:

SELECT GROUP_CONCAT(timeblock_ID SEPARATOR ',') AS timeblocks FROM time_off WHERE user_ID=$id

并使用结果让每个用户关闭相同的时间:

SELECT
   users.ID, users.username
FROM time_off
   LEFT JOIN users ON users.ID=time_off.user_ID
WHERE
    time_off.timeblock_ID IN($timeblocks)
GROUP BY users.ID

不是那么难,不是吗?实施取决于您。