从本周获取条目?

时间:2016-11-15 17:46:44

标签: php mysql

现在我有一个问题可以获取过去7天的参赛作品

 AND  entries.created > DATE_SUB(NOW(), INTERVAL 1 WEEK) GROUP BY entries.id ORDER BY count DESC"

但我希望它可以是当前的一周,所以它会在每个星期一重置。

我如何制定这样的问题?

2 个答案:

答案 0 :(得分:0)

首先,您可以使用编程语言获得当前星期一的时间。例如在php

$start = date('Y-m-d',strtotime('last monday'));

然后你可以像这样在sql中注入值: entries.created> $ {start} // 2016-11-14例​​如。

答案 1 :(得分:0)

要在MySQL中完全执行此操作,您需要一种方法来从任何特定DATETIMETIMESTAMP值获取一周的第一天。将其视为截断到最后一个星期日或截断到最后一个星期一的功能。

truncate-to-last-Sunday看起来像这样:

   FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -1, 7))

truncate-to-last-Monday看起来像这样(注意 -2

   FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -2, 7))

(根据您当地的业务规则选择星期日或星期一,将其中的某一天视为第一天。)

然后,您的WHERE子句将包含以下内容:

AND entries.created >= FROM_DAYS(TO_DAYS(NOW()) -MOD(TO_DAYS(NOW()) -1, 7))

有人希望MySQL有一个TRUNCATE_TO_WEEK(datestamp,locality)功能。但事实并非如此。

如果你想按日历周总结你的桌子,你需要这样的东西。

  SELECT 
     FROM_DAYS(TO_DAYS(entries.created) -MOD(TO_DAYS(entries.created) -1, 7)) week_begins,
     COUNT(*) entries_count
  FROM
     entries
  GROUP BY FROM_DAYS(TO_DAYS(entries.created) -MOD(TO_DAYS(entries.created) -1, 7))
  ORDER BY 1

以下是对这一点的更全面的解释,包括一些方便的存储函数。

http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/