【问题标题】:Order By Year with Date field Mysql/PHP按年份排序,带日期字段 Mysql/PHP
【发布时间】:2012-03-08 01:46:54
【问题描述】:

我无法让我的年份正确回显。

示例:我有 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>

【问题讨论】:

  • 我添加到我原来的问题。
  • 您是否也将日期作为 01/01/YYYY 放入数据库中?他们从来没有月/日信息?您在上面所做的实际上排除了 2012 年 1 月 1 日之后的所有日期,对吗? (即实际上不包括 2012 年?)
  • @Kato 他们正在查询一个日期范围,每次 1 年。
  • 啊,我的大脑就是拒绝接受;你为什么要做几个查询,而你可以做一个?数据已经排序,那么为什么不一次选择整个范围然后迭代呢?此外,此页面上是否有任何 CSS 或 JavaScript? (可能导致您的问题的因素)
  • 我将我的日期作为文本发布。 strtotime($_POST['date']), "文本"

标签: php mysql date sql-order-by


【解决方案1】:

我同意加藤的评论。通常,您会获取所有结果并对其进行迭代,在数据更改时打印一个新标题。

这是处理这类事情的通常方式(伪代码):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多