2012-02-16 126 views
1

我無法讓我的年份正確回顯。按日期排序的日期字段Mysql/PHP

例如:我有兩篇新聞文章,一篇是2011年的版本,另一篇是2012年的版本。他們正在分裂成正確的「年份」div。但是,當談到渲染今年,它的工作原理。但2011年和2012年相互疊加。像這樣的東西。


5.1.12我的新聞文章


如果2011年份假設去

5.1.11我的新聞文章


這是我的代碼。

<? 
$startYear = 2010; 
$endYear = 2012; 

for($y = $endYear; $y > $startYear -1; $y--) { ?> 

<? 
$news = query("SELECT * FROM news_entries 
       WHERE title > '' 
       AND published = 1 
       AND date >= '" . mktime(0,0,0,0,0,$y) . "' 
       AND date < '" . mktime(0,0,0,0,0,$y+1) . "' 
       ORDER BY date DESC"); 
?> 

查詢的其餘部分。

  <? if($news['total']>0) { ?> 
       <h3><? echo $y; ?></h3> 
       <table cellpadding="0" cellspacing="0" border="0"> 
        <tr> 
         <th class="first" width="125">Date</th> 
         <th>News Headline</th> 
         <th width="140">&nbsp;</th> 
        </tr> 
        <? do { ?> 
        <tr> 
         <td><span><? echo date("F d, Y",$news['data']['date']); ?></span></td> 
         <td><a href="<? echo $baseURL . "news/" . $news['data']['id'] . "/" . htaccess_format($news['data']['name']); ?>" title="<? echo $news['data']['headline']; ?>"><? echo $news['data']['headline']; ?></a></td> 
         <td><a href="<? echo $baseURL . "news/" . $news['data']['id'] . "/" . htaccess_format($news['data']['name']); ?>" title="Learn More" class="button">Learn More</a></td> 
        </tr> 
        <? } while($news['data'] = mysql_fetch_assoc($news['object'])); ?> 
        <? }} ?> 
        <tr> 
         <td colspan="2" class="last"></td> 
         <td class="last">&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:;" title="Back to Top" class="top">Back to Top</a></td> 
        </tr> 
       </table> 
+0

我加入到我原來的問題。 – LadyGuru 2012-02-16 16:41:24

+0

您是否也將日期作爲01/01/YYYY放入數據庫?他們從來沒有月/日信息?上面的操作實際上排除了01/01/2012之後的所有日期嗎? (即實際上不包括2012?) – Kato 2012-02-16 16:53:17

+0

@Kato他們正在做一個日期範圍,在查詢中每次一年。 – 2012-02-16 16:55:28

回答

0

我同意加藤的評論。通常,您可以獲得所有結果並遍歷它們,在數據更改時打印新的標題。

下面是這種類型的事情通常處理(僞):

$sql = "SELECT * FROM news_enteries ORDER BY date DESC"; 
// Prepare statement 
$stmt = $pdo->prepare($sql); 
// Bind variables 
... 
// Execute query 
$stmt->execute() or die(); 

$year_header = ""; 
while ($row = $stmt->fetch()) { 
    $year = date("Y", strtotime($row['date'])); 
    // Do we need a new year header? 
    if ($year_header <> $year) { 
    $year_header = $year; 
    // Print year header 
    echo $year_header; 
    } 
    // Process rest of the row 
    ... 
}