我试着做一些相对简单的事情。基本上,我有一个表,表中有一堆用时间戳标记的行(格式: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>';
}

10-01 16:35