按日期排序,带有Date字段Mysql / PHP

时间:2012-02-16 16:28:45

标签: php mysql date sql-order-by

我无法让我的一年得到正确回应。

示例:我有2篇新闻文章,一篇是2011年,另一篇是2012年。他们正在分成正确的“年份”div。但是当谈到渲染年份时,它是有效的。但2011年和2012年相互叠加。像这样的东西。


2012
2011

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>

1 个答案:

答案 0 :(得分: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
   ...
}