假设我在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提供的建议,这就是我写的。它完全能满足我的需要。(它能显着地更优雅吗?)
<?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>";
}
?>发布于 2012-03-04 14:29:49
要想从一年中得到一个十年,你必须把它除以10,然后乘以它。
为了保存当前的十年,有一个变量$last_decade并根据当前的变量测试它(然后用current重写)
选择按日期排序的记录
就这样
发布于 2012-03-04 14:37:30
要添加的列是truncate(year(from_unixtime(date))/10,0) as Decade。然后,您希望按十年顺序作为主订单键,并在fetch循环中检测十年上的中断。
(或者省略from_unixtime(),您使用的是MySQL日期,而不是PHP。)例如。
$sql = 'SELECT ID, DATE, TITLE,
truncate(year(DATE)/10,0)*10 as DECADE
FROM ALBUM_TABLE
ORDER BY 4,3';如果你想在十年内按标题订购。为什么这涉及更改架构??
如果您想严格按日期订购,那么在PHP中使用这个十年可能更容易,但这就是您想要的。如果你想在十年内获得所有权,你能想出更好的办法吗?
https://stackoverflow.com/questions/9555627
复制相似问题