查询日历活动的最佳方式?

时间:2009-04-09 17:42:12

标签: php mysql database

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

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

  1. 常规时间表 - 这用于为一周中的每一天创建一个数组,其中列出了可用的工作人员数量,可用的工作时间等。
  2. 计划变体 - 如果日期有变化,这将覆盖常规计划数组中的信息。
  3. 事件 - 由日期引用的现有事件。
  4. 在此阶段,代码会循环显示当月的日期,并会每天检查两到三件事。

    1. 时间表是否有任何变化(公众假期,更短时间等)?
    2. 这一天有多少小时/可用的工作人员?
    3. (如果有工作人员)今天已经安排了多少次活动?
    4. 步骤1和步骤3需要数据库查询 - 假设每月30天,每页查看60个查询。

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

      非常感谢有关如何更有效地完成此任务的任何想法或建议!

      谢谢!

3 个答案:

答案 0 :(得分:1)

创建一个表格:

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 doesn't

但是,您可以用丑陋的

替换t_month
SELECT  1 AS month_day
UNION ALL
SELECT  2
UNION ALL
...
SELECT  31

答案 1 :(得分:1)

我想不出一个很好的理由,你需要将每个查询限制为一天。当然,您只需选择一对日期之间的所有值。

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

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

答案 2 :(得分:1)

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

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