我正在创建一个日历,显示一个月的活动时间表。每天都有几个参数可以确定是否可以安排更多活动(有多少工作人员,有多少人可用等)。
我的数据库使用三个表设置:
在此阶段,代码会循环显示当月的日期,并会每天检查两到三件事。
步骤1和步骤3需要数据库查询 - 假设每月30天,每页查看60个查询。
我很担心这会如何扩展,对于一些用户我不认为这会是一个很大的问题,但如果有20个人同时尝试加载页面,那么它会跳到1200查询...
非常感谢有关如何更有效地完成此任务的任何想法或建议!
谢谢!
答案 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对数组索引非常灵活,你可以使用各种各样的东西作为键......或几个索引。