Сортировать по году с полем даты Mysql / PHP - PullRequest
1 голос
/ 16 февраля 2012

У меня проблемы с тем, чтобы мой год звучал правильно.

Пример: у меня есть 2 новостных статьи, одна из которых посвящена 2011 году, а другая 2012 году. Они делятся на правильно разделенный год.Но когда дело доходит до рендеринга года, это работает.Но 2011 и 2012 годы сложены друг над другом.Что-то вроде этого.


20122011

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 голосов
/ 30 апреля 2012

Я согласен с комментарием Като.Как правило, вы получаете все результаты и перебираете их, печатая новый заголовок при изменении данных.

Вот как обычно обрабатываются вещи такого типа (псевдокод):

$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
   ...
}
...