2011-10-09 109 views
1

我正在创建一个Web应用程序,如果用户点击名为“WEEK”的链接,页面会显示所有提交的帖子那一周。还有一个选项可以查看本月提交的所有帖子。在posts表中有一个名为post_date的列,其中日期的格式为:YYYY-MM-DD。MySQL:从日期在当前周和当前月份中选择数据

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

我能成功地选择这样提交了关于当前日期的帖子:

$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 

如果$ _GET [“当”]的URL中的值是‘今天’,脚本工作正常并生成“今天”提交的帖子。但我不知道如何选择当前周和当月。我已经完成了我的功课:我已经搜索了Google,并且也搜索了StackOverflow的匹配问题,但是还有像上周的数据这样的问题,代码很简单,并且不适合我的情况。例如,可以使用WEEK($today,1)(我不知道它是否有效,但我想要生成在当前的周和月中提交的帖子)来选择第一,第二,第三和第四周的选项。

在此先感谢。

+1

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

回答

5

several MySQL functions为你

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

听起来令人信服,但你也应该看看年,否则每年的每周/每月的帖子都会显示出来。 – MJSt

+0

@vorax:好点。 – gbn

+0

好吧,现在它可以工作。谢谢@gbn –

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()) 

我希望,我可以帮你。

0

这个怎么样做这样的事情?

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); 
相关问题