要求真正令人讨厌的PHP查询(未来和过去的unixtime不同的日期)

时间:2011-03-28 21:11:35

标签: php mysql

我有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。

真的,有什么想法吗? :)

也欢迎每个不同日期的分隔查询。谢谢!

4 个答案:

答案 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算法/日历,在主查询本身之前需要转换器,但是我可以自己做。

我只是想到了更容易或实际的解决方案,但似乎没有。