我有1个表(会议),其中包含一些asix时间戳(日期),主要是将来的会议。 例如:
id.1 30-3-2011(星期三) - 未来
id.2 31-3-2011(星期四)。 - 未来
另一方面,还有一个表(schedule),包含列(日期)中的unix时间戳,但是 - 在过去。与上面的示例不同,这些会议是每周三或周二进行的会议。虽然日期是在过去写的,但是通过使用date_format(w),PHP按功能日期(“w”)收集它们,因为“今天”不是问题。
即
id.44 15-3-2011(星期二) - 过去(3周前!)
id.45 25-3-2011(星期五) - 过去
现在,出现问题是为了显示所有人在将来作为“不正常情况”加入 - 不同的日期和日期!
今天是2011年3月28日星期一,输出应该是这样的。
++星期二(29.3) id.44
周三(30.3) ID.1 周四(31.3。)++ ID.2++星期五(1.4。) id.45。
真的,有什么想法吗? :)
也欢迎每个不同日期的分隔查询。谢谢!
答案 0 :(得分:0)
如何识别重新发生并应显示在未来日历上的“过去”事件?
我假设你在事件记录上有一个“重复”标志,所以像
SELECT ...
FROM schedule
WHERE (eventdate BETWEEN now() and DATE_ADD(now(), INTERVAL 1 WEEK))
OR ((repeat = 1) AND (eventdate < now())
答案 1 :(得分:0)
("(SELECT DISTINCT date_format(from_unixtime(dates),'%w') as day
FROM schedule)
UNION
(SELECT DISTINCT date_format(from_unixtime(dates),'%w') as day
FROM meetings"))
我想我现在正试图创建一个日历。 Btw任何想法如何相应的日期(没有时间)打印事件,如30.3。,1.4。等等?
答案 2 :(得分:0)
以下是对您的结果的查询('2011-03-28'是您可以替换任何一个的日期,您可以在代码中用代码表替换它):
SELECT id, DateX
FROM (
SELECT m_id AS id, m_date AS DateX FROM meeting WHERE (m_date>='2011-03-28')
UNION ALL
SELECT s_id AS id ,
ADDDATE(CONVERT('2011-03-28',DATE), INTERVAL MOD(7+DAYOFWEEK(s_date)-DAYOFWEEK('2011-03-28'),7) DAY ) AS DateX
FROM schedule
) AS u
ORDER BY DateX
最终查询是两个子查询的并集 第一个是在给定日期(2011-03-08)之后会议的日期 第二个查询具有复杂的表达式,但其目标是返回计划表中的所有日期,但是在给定日期(2011-03-08)之后立即将它们移动几周。
使用AddDate(),Mod()和DayOfWeek()的复杂公式只是在给定日期(2011-03-08)中添加了为了达到该周的同一天而丢失的天数。安排日期。 Mod()函数仅用于确保此天数为正数,否则将其再移动一周。
如您所见,完整查询将返回接下来7天的定期计划日期,但不会再返回。由于它们是无限的,因此无法返回所有未来的定期日期。
此致
答案 3 :(得分:0)
Marc,Skrol29,所有人都努力。不幸的是,那些“过去”会议可能包含过去的日期(有时超过2年),因此硬编码将无法完成工作。
看来这个表需要特殊的24/7/30算法/日历,在主查询本身之前需要转换器,但是我可以自己做。
我只是想到了更容易或实际的解决方案,但似乎没有。