2011-12-10 44 views
1

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

非常感谢。

编辑:

这是我此刻的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

你想过滤**,而不是订单。 –

+0

'time()'返回一个整数。什么是你的列类型? –

+0

列类型是一个整数。但至于它的日期不会被修复。由于日期取决于用户发布的日期。因此,我希望它根据用户发布的时间显示标题,并且只显示标题。 – Sygon

回答

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。

希望以上帮助!

+0

这绝对是我正在寻找的答案。然而,至于显示标题,我将如何得到它取决于今天是什么?我需要使用'date'列创建标题,因为这里有存储的unix时间戳 – Sygon

+0

例如:假设某人在2011年12月9日发布了4件东西,它将显示2011年12月9日和其下的4篇帖子。 – Sygon

+0

@JackWillmor,我很抱歉,但我无法理解你上面的评论。我不知道你的数据库和应用程序。你是什​​么意思?“我将如何得到它取决于今天是什么?我需要使用日期列创建标题,因为它具有存储的unix时间戳”?你可以在'echo'标题中显示你可能需要的,而不是'$ new'。 – Abhay

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

+0

对不起,我不认为我解释清楚。我不知道日期会是什么,因为它会在while循环中显示数据。喜欢的东西: 2011年12月10日 - 数据 - 数据 9 2011年12月 - 数据 - 数据 – Sygon

+0

嗯,我明白,这只是你打电话,从PHP,仅此而已的方式。您创建一个准备好的查询,然后在每个循环中插入日期,执行并获取结果。或者,如果您有多个日期,则可以按照这些日期中的建议使用BETWEEN。取决于您的使用案例 –

+0

但是,这一切都将取决于用户是否在当天发布,并显示标题下的帖子。如果他们没有在当天发帖,那么什么都不会显示 – Sygon