Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
询问真正讨厌的PHP查询(与unixtime在未来和过去的日期不同)_Php_Mysql - Fatal编程技术网

询问真正讨厌的PHP查询(与unixtime在未来和过去的日期不同)

询问真正讨厌的PHP查询(与unixtime在未来和过去的日期不同),php,mysql,Php,Mysql,我有1个表(会议),其中包含一些占用unix时间戳(日期),大部分是将来即将召开的会议。 例如: id.1 2011年3月30日(星期三)-未来 id.2 2011年3月31日(星期四)未来 另一方面,还有一个表(schedule),它也在列(dates)中包含unix时间戳,但在过去。与上面的例子不同的是,这些课程每周都会在周三或周二进行。虽然日期是在过去写的,但通过使用date_格式(w),PHP通过函数date(“w”)收集它们,因为“对于今天”这不是问题 即 id.44 2011年3月1

我有1个表(会议),其中包含一些占用unix时间戳(日期),大部分是将来即将召开的会议。 例如:

id.1 2011年3月30日(星期三)-未来

id.2 2011年3月31日(星期四)未来

另一方面,还有一个表(schedule),它也在列(dates)中包含unix时间戳,但在过去。与上面的例子不同的是,这些课程每周都会在周三或周二进行。虽然日期是在过去写的,但通过使用date_格式(w),PHP通过函数date(“w”)收集它们,因为“对于今天”这不是问题

id.44 2011年3月15日(星期二)-过去(3周前!)

id.45 2011年3月25日(星期五)-过去

现在,出现了一个问题,显示它们在不同的日期和日期以“升级”的形式连接在一起,就像在将来一样

今天是2011年3月28日星期一,产出应该是这样的

++星期二(29.3) id.44

++星期三(30.3) id.1

++星期四(31.3) id.2

++星期五(1.4) id.45

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

也欢迎按不同日期进行单独查询。谢谢

您如何识别再次发生并应显示在未来日历上的“过去”事件

我假设你在事件记录上有一个“重复”标志

SELECT ...
FROM schedule
WHERE (eventdate BETWEEN now() and DATE_ADD(now(), INTERVAL 1 WEEK))
   OR ((repeat = 1) AND (eventdate < now())
选择。。。
按计划
其中(eventdate介于now()和DATE_ADD之间(now(),间隔1周))
或者((repeat=1)和(eventdate

我想我现在正在尝试创建一个日历。顺便说一句,你有没有想过如何根据日期(没有时间)打印事件,例如30.3、1.4等等?

下面是对结果的查询('2011-03-28'是可以用任何日期替换的日期,你可以用代码中的参数替换它):

说明: 最后一个查询是两个子查询的并集。
第一个是给定日期(2011-03-08)之后的会议日期。
第二个查询有一个复杂的表达式,但其目标是返回schedule表中的所有日期,但以周为单位进行转换,使它们紧跟在给定日期之后(2011-03-08)

带有AddDate()、Mod()和DayOfWeek()的复杂公式只会在给定日期(2011-03-08)上增加它缺少的天数,以达到计划日期的同一周。Mod()函数在这里只是为了确保天数为正数,否则它会将它再移动一周

如您所见,完整的查询将返回未来7天的定期计划日期,但不能再返回了。不可能返回所有未来的定期计划日期,因为它们是无限的


关于,

Marc,Skrol29,每个人都感谢您的努力。不幸的是,那些“过去”的会议可能包含的日期远远超过过去(有时超过2年),因此硬编码无法完成工作

这个表似乎需要特殊的24/7/30算法/日历,在主查询之前需要某种转换器,但这是我自己可以做的

我只是想有一个更简单或实用的解决方案,但似乎没有。

选择不同的日期格式(从unixtime(dates),“%w”)作为“日期”的日期,甚至加入,但我以后无法根据日期打印。顺便说一句,这不是日历,只是一个小档案。谢谢。
("(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"))
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