繁体   English   中英

查询日历事件的最佳方法?

[英]Best way to query calendar events?

我正在创建一个日历,其中显示了一个月的活动时间表。 每天都有几个参数来确定是否可以在这一天安排更多活动(有多少工作人员,有多少时间等)。

我的数据库是使用三个表设置的:

  1. 定期计划-用于在一周中的每一天创建一个数组,该数组概述了可用的员工人数,可用的时间等
  2. 时间表变化-如果某个日期有变化,则会覆盖常规时间表数组中的信息。
  3. 事件-现有事件,由日期引用。

在此阶段,代码循环遍历一个月中的每一天,每天检查两到三件事。

  1. 日程安排有什么变化(公共假期,较短的工作时间等)?
  2. 这一天有多少小时/多少工作人员?
  3. (如果有工作人员的话)这一天已经安排了多少活动?

第1步和第3步需要数据库查询-假设每月30天,那么每个页面浏览量为60个查询。

我担心这将如何扩展,对于一些用户,我并不认为这会是一个大问题,但是如果有20个人同时尝试加载该页面,那么它将跳至1200个查询。 。

任何有关如何更有效地执行此操作的想法或建议,将不胜感激!

谢谢!

创建一个表:

t_month (day INT)

INSERT
INTO     t_month
VALUES
         (1),
         (2),
         ...
         (31)

然后查询:

SELECT   *
FROM     t_month, t_schedule
WHERE    schedule_date = '2009-03-01' + INTERVAL t_month.day DAY
         AND schedule_date < '2009-03-01' + INTERVAL 1 MONTH
         AND ...

而不是30查询,您只能通过JOIN获得一个查询。

其他RDBMS允许您即时生成行集,而MySQL不允许

不过,您可以用ugly代替t_month

SELECT  1 AS month_day
UNION ALL
SELECT  2
UNION ALL
...
SELECT  31

我想不出有充分的理由将每个查询限制为一天。 当然,您可以选择一对日期之间的所有值。

同样,您可以使用联接来获取给定日期的事件计划的事件数。

然后对数据库查询返回的数组进行循环(每天)。

我在http://rosterus.com上遇到了同样的问题,我们只是将大部分数据加载到页面顶部的数组中,然后在数组中查询相关数据。 此后,页面加载速度提高了10倍。

因此,运行一个或两个广泛的查询来收集所需的所有数据,选择适当的键并将每个结果存储到数组中。 然后访问阵列而不是数据库。 PHP在数组索引方面非常灵活,您可以将各种东西用作键...或多个索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM