如何在白天过滤PHP / MySQL中的数据?

时间:2011-12-10 17:57:08

标签: php mysql

我有一个PHP脚本,用户提交帖子并保存到数据库中;我使用time()存储发布日期。我想找出一种方法来按天过滤我的数据。我有一个while循环,它返回用户按日期排序的所有帖子,但我要做的是有一个日期的标题,例如2011年12月10日,只有当天提交的帖子。如果当天有数据,我希望它只显示标题。

非常感谢。

编辑:

此刻是我的while循环:

$get_posts = mysql_query( "SELECT * FROM `posts` WHERE `userid` = '$name[id]' ORDER BY `date` DESC" );
while( $userpost = mysql_fetch_assoc( $get_posts ) )
{
    echo $userpost[ 'post' ];
}

但不知何故,在循环之前我需要显示标题帖子或帖子的日期已提交。我认为它需要是当前循环之外的循环,但我不知道如何去做。

3 个答案:

答案 0 :(得分:2)

正如您在一篇评论中提到的那样,DB列的类型是整数。所以我假设您将UNIX时间戳存储在列中。根据我的理解,您希望显示如下内容:

DATE HEADING 1
- data
- data

DATE HEADING 2
- data
- data

如果这是正确的,这段代码可能会有所帮助:

$rs = mysql_query('SELECT `column1`, `column2`, FROM_UNIXTIME(`the_time_column`, \'%d %M %Y\') AS `date_value`
FROM `your_table`
ORDER BY `the_time_column`');
$old = '';
while ($row = mysql_fetch_assoc($rs)) {
    $new = $row['date_value'];
    if ($new != $old) { // marks the beginning of a new heading
        echo 'heading = ' . $new;
    }
    // start displaying data under the heading
    echo $row['column1'];
    echo $row['column2'];
    // finish displaying data

    $old = $new;
}

请注意我使用了虚拟列和表名,所以请用实际值替换它们。此外,上面的代码片段将按日期的升序显示标题。要反过来显示,请在查询结束时添加DESC。

希望以上有所帮助!

答案 1 :(得分:1)

你从数据库中得到了正确的结果,即:

SELECT * FROM YourTable 
WHERE 
   DAY(yourDateField)='15' AND 
   MONTH(yourDateField)='10' AND 
   YEAR(yourDateField)='2011'
;

或更好,直接,像这样:

SELECT * FROM YourTable 
WHERE yourDateFieldld=2011-12-10;

取决于如何在数据库中存储数据。

无论如何,这应该在数据库中完成,而不是PHP

答案 2 :(得分:0)

你可以使用BETWEEN。

查看The MySQL Reference