我有一个关于今天获取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然后,我需要使用"a week that includes "today“and starts on a Sunday”来获取"this week's event“。
我如何在MySQL中做到这一点?
任何帮助都将不胜感激。提前感谢:)
干杯,马克
发布于 2009-07-21 02:34:09
你需要更好地定义“本周”--你是指以今天为中心的7天滑动窗口,还是从周日开始的一周(包括“今天”)?这完全取决于“本周”的语义,我们不可能确定你所说的模棱两可的表达是什么意思。在你提到的两种方法中,根据你的意思,其中一种(或其变体)是合适的。
SQL :OP在一条评论中澄清了他的意思是“包括”今天“和星期天开始的一周--我从他对FROM_UNIXTIME的使用中推断出他的目标是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)应该是操作员正在查找的WHERE子句。
发布于 2009-07-21 03:00:59
我不确定这是用于SQL Server还是MySQL,但在MySQL中,您可以获得今天的当前日期,然后使用date_add从当前日期(开始日期)减去多少天,然后使用开始日期,再次使用date_add添加7天(结束日期)。
希望这对你有帮助,如果你需要语法方面的帮助,请告诉我。
发布于 2009-07-21 03:06:12
根据表/列的名称,您似乎正在使用Drupal。您是否考虑过使用视图来实现您的目标?我不能从上下文中判断这是否是您正在编写的模块的一部分,在这种情况下,继续努力,或者您是否只想在块中显示事件列表,在这种情况下,View应该能够为您完成所有这些操作,而不会影响PHP/SQL。
https://stackoverflow.com/questions/1157004
复制相似问题