首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PHP循环使用按十年分组的记录遍历MySQL结果集?

问如何使用PHP循环使用按十年分组的记录遍历MySQL结果集?
EN

Stack Overflow用户
提问于 2012-03-04 14:23:44
回答 2查看 1.6K关注 0票数 1

假设我在MySQL中有很多记录,如下所示:

ID _日期_

1961年-03-21年

2- 1964-02-05

1976年-11-30只小鼠

1979年-09-14年猴子

你认为有什么方法可以把所有的记录和回音加入他们十年的一组呢?也就是说,我想把它们组织成10年,就像这样:

20世纪60年代

记录1

记录2

七十年代

记录3等

理想情况下,它只会打印出“十年标签”,如果该十年的记录确实存在的话。

MySQL集团的做法似乎不对。如何使用带嵌入式if测试的while循环,使用某种针对每年的数学测试?

在我不知道未来的几十年(或几个世纪)将出现的情况下,我正努力想出一些优雅的、可伸缩的和可重用的东西。

============更新=============

使用Col Shrapnel提供的建议,这就是我写的。它完全能满足我的需要。(它能显着地更优雅吗?)

代码语言:javascript
复制
<?php
// perform Query, sort by date, get your results, then...
$lastDecade = 0;
while($row = mysql_fetch_array($rows->list))
{
    $currentYear = date("Y",strtotime($row['date']));
    $currentDecade = floor((int)$currentYear/10)*10;
    if($currentDecade>$lastDecade)
    {
        echo "<h1>" . $currentDecade . "</h1>";
        $lastDecade = $currentDecade;
    }
        echo "<h2>" . $row['title'] . "</h2>";
}
?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-04 14:29:49

要想从一年中得到一个十年,你必须把它除以10,然后乘以它。

为了保存当前的十年,有一个变量$last_decade并根据当前的变量测试它(然后用current重写)

选择按日期排序的记录

就这样

票数 3
EN

Stack Overflow用户

发布于 2012-03-04 14:37:30

要添加的列是truncate(year(from_unixtime(date))/10,0) as Decade。然后,您希望按十年顺序作为主订单键,并在fetch循环中检测十年上的中断。

(或者省略from_unixtime(),您使用的是MySQL日期,而不是PHP。)例如。

代码语言:javascript
复制
$sql = 'SELECT ID, DATE, TITLE,
               truncate(year(DATE)/10,0)*10 as DECADE
        FROM   ALBUM_TABLE 
        ORDER BY 4,3';

如果你想在十年内按标题订购。为什么这涉及更改架构??

如果您想严格按日期订购,那么在PHP中使用这个十年可能更容易,但这就是您想要的。如果你想在十年内获得所有权,你能想出更好的办法吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9555627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档