2017-01-28 76 views
1

我一直試圖根據發佈的年份和月份顯示來自數據庫的帖子,但無法做到這一點,因爲我已經嘗試了一切,但仍然認爲這可以在SQL QUERY中完成,並在PHP端支持。下面是我DATABSE結構Sql和php按發佈年份,日期和月份分組數據

id | title    | date 
------------------------------------------------- 
1 | hello this is a post | 2016-01-03 11:33 AM 
2 | this is what i think | 2016-01-03 10:33 PM 
3 | this is it   | 2017-14-06 06:33 PM 
4 | Blah Blah Blah  | 2017-01-03 10:33 AM 
5 | is what i think  | 2016-04-03 10:33 PM 

現在我想選擇和分組這種方式

你在2016年1月3日

後您好,這是一個後

這就是我認爲你的

後在2017-14-06

這是它

你在2017年1月3日

等等等等等等

您的文章張貼在2017年1月3日

是我認爲的

我試着用波紋管代碼這樣

<?php 
//I swear i don't know what else to do here 
$db->prepare('SELECT * FROM post 
GROUP BY ("") 
ORDER BY date'); 
$db->execute(); 
$output = $db->getAll(); 
$db->free(); 
if(!is_null($output)){ 
foreach($output as $row){ 
$title = $row->title; 
$date = $row->date; 

/* 
Only this path i got near but i can only display post for this month using $currentDate below. 
But how can i get other once split according to date? 
*/ 

$split = explode(" ", $date); 
$currentDate = date('Y-m-d'); 
if($split[0] == $currentDate){ 
    echo 'post on '.$currentDate.'<br/>'.$title; 
}else{ 
    echo 'post on '.$split[0].'<br/>'.$title; 
} 
?> 
+1

'2017-14-06'?在地球上,我們只有一年的十二個月。 –

回答

1

我最喜歡的方法,始終把結果存入數組第一。

$date = date('Y-m-d', strtotime($row['date'])); 
$result[$date][] = $row['title']; 

從上面的數組中可以使用foreach輸出結果。

foreach($result as $key => $value) { 
    echo 'Your post on '.$key.'<br>'; 
    foreach($value as $k => $v) { 
     echo $v.'<br>'; 
    } 
} 
+0

我應該把你的代碼放在'foreach($ output as $ row)'的數據庫循環中嗎? –

+0

你的數據庫循環是把東西放入數組中。然後,'foreach'循環在你的數據庫之外。 – bugscoder

2

這裏有三個要求。一種是沒有時間來呈現帖子的日期。其次是按日期/時間排列帖子。

這些可以用這樣的查詢來完成。

SELECT DATE(`date`) as date, `title` FROM post ORDER BY `date` 

GROUP BY對此沒有任何作用。

第三個要求是當連續的帖子相同時只顯示一次日期。這必須在PHP中完成。

$prev_date = ""; 
foreach ($output as $row) { 
    $title = $row->title; 
    $date = $row->date; 
    if ($date != $prev_date) { 
     echo "Posts on " .$date; 
    } 
    echo information about the post 
    $prev_date = $date; 
} 

訣竅是使用我命名爲$ prev_date的變量來檢測日期在行與行之間的變化。

+0

請在所有數據中添加'帖子',即使發佈月份和年份相同 –