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

如何在PHP/MySQL中按天过滤数据?,php,mysql,Php,Mysql,我有一个PHP脚本,用户提交帖子并保存到数据库中;我正在使用time()存储发布的日期。我在想办法每天过滤我的数据。我有一个while循环,它返回用户发布的按日期排序的所有帖子,但是我想做的是有日期的标题,例如2011年12月10日,并且只有当天提交的帖子。如果有当天的数据,我只希望它显示标题 非常感谢 编辑: 这是我目前的while循环: $get_posts = mysql_query( "SELECT * FROM `posts` WHERE `userid` = '$name[id]'

我有一个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' ];
}

但是在循环之前,我需要显示一篇或多篇文章的提交日期。我认为它需要是当前循环之外的一个循环,但我不知道如何进行。

您可以从数据库中正确地获得它,即:

SELECT * FROM YourTable 
WHERE 
   DAY(yourDateField)='15' AND 
   MONTH(yourDateField)='10' AND 
   YEAR(yourDateField)='2011'
;
或者更直接地,像这样:

SELECT * FROM YourTable 
WHERE yourDateFieldld=2011-12-10;
取决于在数据库中存储数据的方式

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


请看一看

,正如您在对问题的评论中提到的,DB列的类型为integer。因此,我假设您正在列中存储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


希望以上帮助

您要的是筛选,而不是顺序。
time()
返回一个整数。列类型是什么?列类型是整数。但具体日期不会确定。因为日期将取决于用户发布的日期。因此,我希望它根据用户发布的时间显示日期标题,并且仅在用户发布标题时显示标题?保存时间信息的DB列的数据类型是什么?因为您在上面的评论中提到了列类型是整数,所以我假设您使用PHP的time()函数来存储UNIX时间戳,对吗?抱歉,我认为我没有解释清楚。我不知道日期是什么,因为它将在while循环中显示数据。类似于:2011年12月10日-data-data 2011年12月9日-data-dataWell,据我所知,这只是从PHP中调用的方式,仅此而已。创建一个准备好的查询,然后在每个循环上插入日期,执行它并获得结果。或者,如果您有几个日期,您可以按照这些日期上的建议使用BETWEEN。这取决于你的使用案例,但这一切都取决于用户是否在当天发布文章,并在标题下显示他们的文章。如果他们没有在那天发表文章,那么就不会有任何结果。好吧,我仍然不知道这有什么关系,也不知道这会如何改变我的建议。您可能需要编辑问题并更详细地描述问题。因为如果我理解你的评论,那正是你会得到的。这绝对是我想要的答案。但是,对于显示标题,我如何根据当天的情况获取标题?我需要使用
date
列创建标题,因为这有存储的unix时间戳,例如:假设某人在2011年12月9日发布了4条消息,它将显示2011年12月9日及其下的4条消息。@JackWillmor,很抱歉,我无法理解您上面的评论。我不知道你的数据库和应用程序。您所说的“根据日期如何获取?我需要使用日期列创建标题,因为它具有存储的unix时间戳”是什么意思?您可以在标题
echo
@JackWillmor中显示您可能需要的任何内容,而不是
$new
,很抱歉,我没有阅读您的第二条评论。我认为我的代码片段将为您提供所需的内容。这是2011年12月9日,其后是其下的4个员额。您需要做的唯一更改是替换
echo'heading='$新建
,只需
回显$new
。那应该行!还有,别忘了输入
或其他任何东西,为输出提供更多的结构。我很抱歉解释得这么糟糕。标题是帖子发布的日期。如2011年12月9日。我不明白日期值是什么?