【问题标题】:MySQL: Select data from a table where the date falls in the current Week and current MonthMySQL:从日期在当前周和当前月的表中选择数据
【发布时间】:2011-10-10 02:01:08
【问题描述】:

我正在创建一个网络应用程序,如果用户单击名为“WEEK”的链接,该页面会显示该周提交的所有帖子。还有一个选项可以查看本月提交的所有帖子。帖子表中有一个名为 post_date 的列,其中日期的存储格式为:YYYY-MM-DD。

我的问题:我不知道如何生成本周和本月提交的帖子。

我可以像这样成功选择当前日期提交的帖子:

$today = date("Y-m-d"); // This is the format of the DATE column named post_date in the posts table.
if($_GET['when'] == "today")
{
$when = $today;
}
else if ($_GET['when'] == "week")
{
$when = // I don't know what goes here if I want to generate posts submitted this week
}
else if ($_GET['when'] == "month")
{
$when = // I don't know what goes here if I want to generate posts submitted this month
}
// I have already connected to the database and selected the table.
$query = "SELECT * FROM posts WHERE post_date = '$when'";
$result = mysql_query($query);
// After this I Generate the Posts Using WHILE loop and mysql_fetch_array

如果 URL 中 $_GET['when'] 的值为“今天”,则 SCRIPT 工作正常并生成“今天”提交的帖子。但我不知道如何选择当周和当月。我已经完成了我的功课:我用谷歌搜索并搜索了 StackOverflow 以寻找匹配的问题,但是有一些问题,比如上周的数据,代码很简单,不适合我的情况。例如,有一个选项可以使用WEEK($today,1)选择第1、2、3和4周(我不知道它是否有效,但我想生成当前周和月提交的帖子) .

提前致谢。

【问题讨论】:

  • 在现实世界中,“当前周”是一个模糊的概念。对于某些人来说,本周从周日开始,到周六结束。对于其他人来说,它从周一开始,到周日结束。这对你意味着什么?

标签: php mysql


【解决方案1】:

several MySQL functions为你做这样的事情

SELECT * FROM posts
WHERE
   WEEK(post_date) = WEEK(CURDATE())
   AND
   MONTH(post_date) = MONTH(CURDATE())

【讨论】:

  • 听起来很有说服力,但你也应该看看 YEAR,否则会显示每年一周/一个月的帖子。
【解决方案2】:

好吧,通过稍微修改您的代码,您可以使用 SQL 解决 WEEK 和 MONTH 问题!

关于:MySQL-Documentation,这可能是您的解决方案:

SELECT *
FROM   posts
WHERE  YEARWEEK(post_date) = YEARWEEK(NOW())

第二个可能有点复杂:

SELECT *
FROM   posts
WHERE  YEAR(post_date) = YEAR(NOW())
AND    MONTH(post_date) = MONTH(NOW())

希望能帮到你。

【讨论】:

    【解决方案3】:

    这个怎么样?

    if($_GET['when'] == "today") {
        $query = "SELECT * FROM posts WHERE DATE(post_date) = CURDATE()";
    } else if ($_GET['when'] == "week") {
        $query = "SELECT * FROM posts WHERE post_date >= DATE_SUB(NOW(), INTERVAL 1 WEEK)";
    } else if ($_GET['when'] == "month") {
        $query = "SELECT * FROM posts WHERE post_date >= DATE_SUB(NOW(), INTERVAL 1 MONTH)";
    }
    $result = mysql_query($query);
    

    【讨论】:

      猜你喜欢
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多