【问题标题】:archive php sql date()归档 php sql date()
【发布时间】:2013-09-20 12:40:07
【问题描述】:

我开始了一些我不知道如何完成的事情。我已经建立了一个名为“博客”的表。在 blog 表中有一个列,date。我使用date() 函数来检索此列: “1360225336”。

我想要 Archives 按年和月:

-2013

9. 九月 . . . 3.三月 2.二月 1.1月

-2012

12.12 月 . . . 3.三月 2.二月 1.1月

  <?php


        $query_o = mysql_query("SELECT * FROM `blog`")or die(mysql_error());

        while($row_o = mysql_fetch_assoc($query_o)){

        $new_date_y = date("Y", $row_o[date]);
        $new_date_m = date("n", $row_o[date]);


    $query_h = mysql_query("SELECT * FROM `blog` where date = $new_date_y ")or die(mysql_error());

    while($row_h = mysql_fetch_assoc($query_h)){

    $new_date_m1 = date("n", $row_o[date]);

echo'<ul>$new_date_y</ul>';
echo'<li>$new_date_m1</il>';
}



        }
    ?>

【问题讨论】:

  • 您能花几分钟时间把它翻译成英文,以便我们更容易理解吗?什么是存档?很难说出你在做什么。
  • 我已经更正了您的英语并(希望)保持您的意思。我建议你以后用你自己的语言写你的问题,然后在发布之前通过自动翻译器(如谷歌,translate.google.com)提供它。谷歌并不完美,但它可能比你目前的英语水平更具可读性。

标签: php mysql sql date


【解决方案1】:

试试这个

$result = mysql_query("select distinct YEAR(date) as year from blog ") or die(mysql_error());

$years = array();

while($row = mysql_fetch_assoc($result))
      $years[] = $row['year'];

$one_year_posts = array();

foreach($years as $year){
    echo $year."<br/>";
    //echo "select * from blog where YEAR(date) = '$year'";
     $result1 = mysql_query("select * from blog where YEAR(date) = '$year'") or die(mysql_error());

     while($row1 = mysql_fetch_assoc($result1))
      $one_year_posts[] = $row1;

     foreach($one_year_posts as $post){
     //echo $post['date']."<br>";
      $months.=  date('m F',strtotime($post['date'])).", ";

  }
  echo $months = rtrim($months," ,");
}

【讨论】:

    【解决方案2】:

    试试这个查询:

    SELECT * FROM `blog` GROUP BY YEAR(`Date`), MONTH(`Date`);
    

    如果您还需要day,只需在末尾添加, DAY(`Date`)即可。

    【讨论】:

    • 你不能按年/月分组 b/c 日期列看起来像 unix-timestamp。
    【解决方案3】:
    $result = mysql_query("select distinct FROM_UNIXTIME(date,'%Y') as year from blog ") or die(mysql_error());
    
    $years = array();
    
    while($row = mysql_fetch_assoc($result))
          $years[] = $row['year'];
    
    $one_year_posts = array();
    
    foreach($years as $year){
        echo "<br/>-".$year."<br/>";
         $result = mysql_query("select * from blog where FROM_UNIXTIME(date,'%Y') = '$year'") or die(mysql_error());
    
         while($row = mysql_fetch_assoc($result))
          $one_year_posts[] = $row;
    
         foreach($one_year_posts as $post){
            echo strftime('%d %B',$post['date']).", ";
      }
    }
    

    注意:使用 mysqli_ 而不是 mysql_ 函数。后者已弃用,不再维护。

    【讨论】:

    • 感谢您的回答...它只给我 2013(年)我该怎么做'
        2013
      • 9 月
      • 2 月
      • 1 月
      ' +1
    • @user2262606 出现错误。我更新了我的答案。立即检查。
    • 现在给我 '2013 年 1 月 10 日、1 月 10 日、1 月 10 日、1 月 10 日、1 月 11 日、1 月 11 日、1 月 11 日、1 月 11 日、1 月 11 日、1 月 14 日、1 月 15 日、1 月 15 日, 1 月 15 日,1 月 15 日......'这里有问题
    • @user2262606 你问的对吗?剩下的只是格式问题。如果您想显示更多字段,只需在最后一个循环中使用 $post 数组并进行一些格式化。 (无论如何我做了一点格式更新)。
    • 我只想要一个月我改变 echo "
    • ".strftime('%B',$post['date'])."
    • ";但它不好......我只想要一次一月和一个月后(没有双)
    【解决方案4】:

    在尝试了很多新事物之后我终于成功了

    <?php
    
    
    $result = mysql_query("select distinct FROM_UNIXTIME(date,'%Y') as year from blog ") or die(mysql_error());
    
    $years = array();
    
    while($row = mysql_fetch_assoc($result))
    $years[] = $row['year'];
    
    $one_year_posts = array();
    
    foreach($years as $year){
    
    
    
    $result1 = mysql_query("select distinct FROM_UNIXTIME(date,'%M') as m from blog where FROM_UNIXTIME(date,'%Y') = '$year'") or die(mysql_error());
    
    $ms = array();
    
    while($row1 = mysql_fetch_assoc($result1))
    $ms[] = $row1['m'];
    
    $one_year_posts = array();
    
    foreach($ms as $m){
    
    $date= $year;
    $date.= " ";
    $date.= $m;
    
    echo <<<PRINT
         <li><a href='search.php?archie=$date'>$date</a></li>
    PRINT;
    
    }
    
    
    }
    ?>
    

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签