MySQL:如何使用当前日期获得“本周的日期”?

时间:2009-07-21 02:24:25

标签: php sql date

我有关于今天获得5个事件的SQL查询:

SELECT n.nid, n.type, n.title, nr.body, nr.teaser, FROM_UNIXTIME(e.event_start) start_date, FROM_UNIXTIME(e.event_end) end_date
FROM node n
LEFT JOIN event e ON n.nid = e.nid
LEFT JOIN node_revisions nr ON nr.nid = e.nid
WHERE n.`type` = 'event'
AND NOW() BETWEEN FROM_UNIXTIME(e.event_start) AND FROM_UNIXTIME(e.event_end)
ORDER BY n.`created` DESC
LIMIT 5

然后我需要使用“包含”今天的一周“并在星期日开始”来获得“本周的活动”。

我怎样才能在MySQL中做到这一点?

非常感谢任何帮助。在此先感谢:)

干杯, 标记

4 个答案:

答案 0 :(得分:7)

你需要更好地定义“本周” - 你的意思是以今天为中心的7天滑动窗口,或者一周(包括“今天”的那个)开始,例如在星期天?这完全取决于“本周”的语义,我们不可能通过所谓的模糊表达来决定你的意思。在你提到的两种方法中,根据你的意思,一种或另一种(或其中的一种变体)是合适的。

编辑:OP已在评论中澄清他的意思是“一周包含”今天“并在周日开始” - 我从他对FROM_UNIXTIME的使用中推断出来他所针对的特定SQL方言是MySQL。然后,WEEK(somedate, 0)是MySQL功能,应该给他他想要的内容,请参阅mysql's docs

具体地,

AND WEEK(CURDATE, 0) BETWEEN WEEK(FROM_UNIXTIME(e.event_start), 0)
                         AND WEEK(FROM_UNIXTIME(e.event_end), 0)

应该是OP正在寻找的WHERE子句。

答案 1 :(得分:1)

我不确定这是用于SQL Server还是MySQL,但在MySQL中你可以获得当前的weekday,然后使用date_add从当前日期减去那么多天(开始日期)然后使用开始日期,再次使用date_add添加7天(结束日期)。

希望这有帮助,如果您需要语法方面的帮助,请告诉我。

答案 2 :(得分:0)

根据表/列名称,您似乎正在使用Drupal。您是否考虑过使用View来实现目标?我无法从上下文中看出这是否是您正在编写的模块的一部分,在这种情况下保持插件,或者您是否只想在块中显示事件列表,在这种情况下,View应该能够为你做这一切,而不用乱搞PHP / SQL。

答案 3 :(得分:0)

我不知道你是否有这个选项,但出于性能原因,最好在你的程序代码中进行日期计算。如果在WHERE子句中的列上使用函数,则MySQL无法使用索引。一个简单的例子:http://netfactory.dk/2004/12/13/mysql-date-functions-and-indexes/ 大多数语言都应该有适当的函数/库来进行日期/时间操作。