2011-12-10 84 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