我正在尝试在我的某个应用程序上添加一项功能。这是一个示例:
公司ABC
Business hours:
Sunday closed
Monday 7am - 5pm
Tuesday 7am - 5pm
Wednesday 7am - 5pm
Thursday 7am - 5pm
Friday 7am - 5pm
Saturday closed
公司DEF
Sunday 10am - 12pm
Monday 8am - 4pm
Tuesday 8am - 4pm
Wednesday 8am - 4pm
Thursday 8am - 4pm
Friday 8am - 4pm
Saturday closed
现在,我想要做的是让我的用户能够搜索/过滤营业时间。例如,只返回在周一下午2点,周六下午1点或周一开放的商家。
我的想法是在SQL Server中使用datetime,但似乎我可能需要为每天(星期日到星期六)创建7列,并为开始时间打开到关闭时间打开不同的列。
下一个想法是使这些列可搜索,以便我能够过滤它们。例如,如果用户搜索星期一下午12点,则搜索将是星期一(开放时间)< =(用户搜索,12pm)< =(关闭时间)。
所以基本上,它将类似于:
SELECT *
FROM Companies
WHERE [user_search_time] IS "BETWEEN open_time AND close_time WHERE day=[user_search_day]
我很难设计这个,更不用说如何实现它了。
使用的技术是C#/ ASP.Net和SQL Server 2008。 问题是如何使用上述技术设计/实现此功能。
任何想法/提示将不胜感激。谢谢!
答案 0 :(得分:1)
可能希望将此推送到codereview或程序员。我认为你是在正确的道路上,但不是添加列,而是添加一个新表。叫business_hours
BUSINESS_HOURS
business (company fk)
open_time (datetime)
close_time (datetime)
day (M,T,W,TH,F,S,Sun) // you can do this however u want 1-7 would work as well
然后你的查询几乎和你的查询相同。
SELECT *
FROM
business_hours
WHERE
business = user_company_id
[user_search_time] IS BETWEEN open_time AND close_time and
day=[user_search_day]
对表的好处是它更加非规范化,你可以支持那些有中断的小时数。我可以支持12-2和5-8。您只需插入一条新记录即可。通过从上午12点到下午12点做一个范围,我不是做all day
的忠实粉丝,但它会起作用,并保持你的设计简单。