2013-02-26 93 views
-2

我试图建立一个网站的表单部分,允许用户指定他们是免费的一周中的哪个小时。 (例如:约翰史密斯周二免费4-7,星期三免费8-9)通过时间表中的空闲时间匹配人

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

我在想如何设计我的数据库来支持这个功能,以及什么样的算法可以让我匹配类似的用户?

+0

我会为你写出整个代码,并为你提供整个数据库结构,明天。 http://whathaveyoutried.com/ – AmazingDreams 2013-02-26 21:39:12

+3

您需要更好地定义您的问题 - 取决于您尝试解决的问题,这要么相对简单,要么寻找NP难题的解决方案。 – 2013-02-26 21:40:20

+0

@JonathanRich感谢你的微妙:) – AmazingDreams 2013-02-26 21:40:55

回答

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 | username | email    | ... 
1 | John  | [email protected] | ... 
..................... 

然后你有另一张表,time_off或某物

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

你把两个USER_ID和timeblock_ID一个外键引用到其他表

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

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 

并不难,是不是呢?实施取决于你。