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

Php MySQL:如何使用当前日期获取“本周日期”?,php,sql,date,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

我有一个关于今天获取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中做到这一点

任何帮助都将不胜感激。提前感谢:

干杯,
标记

您需要更好地定义本周-您是指以今天为中心的7天滑动窗口,还是指包括今天在内的一周,例如从周日开始?这完全取决于本周的语义学,我们不可能确定你所说的模糊表达是什么意思。在你提到的两种方法中,根据你的意思,一种或另一种或其变体是合适的

编辑:OP在一篇评论中澄清说,他指的是包括今天在内的一周,从周日开始——我从他使用from_UNIXTIME推断,他针对的特定SQL方言是MySQL。然后,WEEKsomedate,0是MySQL函数,应该给他想要的,请参阅

具体来说,

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

应该是OP要查找的WHERE子句。

我不确定这是针对SQL Server还是MySQL,但在MySQL中,您可以获取今天的当前日期,然后使用从当前日期开始日期减去那么多天,然后使用开始日期,再次使用添加7天结束日期


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

根据表/列名,您似乎正在使用Drupal。您是否考虑过使用视图来实现您的目标?我无法从上下文中判断这是否是您正在编写的模块的一部分,在这种情况下,请继续插入,或者您是否只想在块中显示事件列表,在这种情况下,视图应该能够为您完成所有这些操作,而不必使用PHP/SQL,但出于性能原因,最好在程序代码中进行日期计算。如果在WHERE子句中的列上使用函数,MySQL将无法使用索引。一个简单的例子:
大多数语言都应该有合适的函数/库来处理日期/时间。

嗨,Alex,很抱歉我的问题不完整,因为我也不确定,但我确认了,正确的答案是一周,包括今天,从周日开始:非常感谢Alex!:它成功了。直到现在我才熟悉WEEK函数。现在可以了。干杯:@Christian,很高兴你喜欢它@marknt15总是很乐意帮忙Alex我有个后续问题。我正在努力获取这个月的所有记录。我有这个查询,但不起作用。你认为错误是什么?从节点n中选择n.nid、n.type、n.title,其中n.type='event'和CURDATE DATE\u ADDLAST\u DAYCURDATE,按n间隔1天订单。已创建描述限制5再次感谢。今天怎么可能少于一个月前或比明天多?这就是你要测试的,不是关于数据库的任何东西。。。WHERE子句中的日期为三次。