我正在尝试建立一个带有表单部分的网站,该部分允许用户指定一周中的哪些时间他们是免费的。(例如:John Smith 周二 4 点到 7 点有空,周三 8 点到 9 点有空)
然后我想运行一些服务器端代码来将具有相似时间块的用户配对在一起。
我想知道我应该如何设计我的数据库来支持这个功能以及什么样的算法可以让我匹配相似的用户?
好的,我将尝试制作您的数据库结构。
我认为最好的方法是将一天划分为时间块,例如 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 或 sth
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
没那么难,不是吗?实施取决于您。