我试着做一些相对简单的事情。基本上,我有一个表,表中有一堆用时间戳标记的行(格式:2009-05-30 00:14:57)。
我想做的是一个查询,它提取出所有行,并按月份拆分它们,这样我就得到了一个最终结果,如:
二月
rowID名称订购日期
rowID名称订购日期
rowID名称订购日期
一月
rowID名称订购日期
rowID名称订购日期
rowID名称订购日期
等。
我有几个模棱两可的主意怎么做-他们似乎是长篇大论。
其中一种方法是每月进行一次查询。我将在PHP中导出当前月份,然后构造一个for(),它可以追溯到一定数量的月份。
比如:
$currentmonth = 8;
$last6months = $currentmonth - 6;
for($i = $currentmonth; $i == $last6months; $i--) {
$sql = 'SELECT * FROM reports WHERE MONTH(reports.when) = $currentmonth ';
$res = mysql_query($sql);
// something would go here to convert the month numeral into a month name $currentmonthname
echo $currentmonthname;
while($row = mysql_fetch_array($res)) {
// print out the rows for this month here
}
}
有更好的办法吗?
最佳答案
别忘了你还得应付好几年。如果你有两个记录,一个是09年1月的,一个是08年1月的,你的结果可能会有偏差。
最好听从斯维特罗扎尔的建议,并立即获取所有数据。一旦你把它放在内存中,使用PHP将它分割成有用的部分:
$monthData = array();
$queryResult = mysql_query("
SELECT
*,
DATE_FORMAT('%m-%Y', when) AS monthID
FROM
reports
WHERE
YEAR(when) = 2009 AND
MONTH(when) BETWEEN 5 and 11
");
while ($row = mysql_fetch_assoc($queryResult))
{
if (!isset($monthData[$row['monthID']]))
$monthData[$row['monthID']] = array();
$monthData[$row['monthID']][] = $row;
}
mysql_free_result($queryResult);
foreach($monthData as $monthID => $rows)
{
echo '<h2>Data for ', $monthID, '</h2>';
echo '<ul>';
foreach($rows as $row)
{
echo '<li>', $row['someColumn'], '</li>';
}
echo '</ul>';
}