我有一个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' ];
}
但不知何故,在循环之前我需要显示标题帖子或帖子的日期已提交。我认为它需要是当前循环之外的循环,但我不知道如何去做。
答案 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。