1

我有一个带有月份和年份字段的 mysql 表,如下所示。

    year        month       filename                    filepath
    2013        Feb         2013Feb_Report.xlsx         ./main_reports/2013Feb_Report.xlsx
    2013        Jan         2013Jan_Report.xlsx         ./main_reports/2013Jan_Report.xlsx
    2012        Jul         2012Jul_Report.xlsx         ./main_reports/2012Jul_Report.xlsx
    2013        Mar         2013Mar_Report.xlsx         ./main_reports/2013Mar_Report.xlsx
    2011        Mar         monthly report180413.xlsx   ./main_reports/monthly report180413.xlsx
    2012        Sep         2012Sep_Report.xlsx         ./main_reports/2012Sep_Report.xlsx
    2012        Oct         2012Oct_Report.xlsx         ./main_reports/2012Oct_Report.xlsx

我正在从该表中检索所有字段并将其打印如下。

    2011 Mar  :  monthly report180413.xlsx
    2012 Sep  :  2012Sep_Report.xlsx
    2012 Oct  :  2012Oct_Report.xlsx
    2013 Jan  :  2013Jan_Report.xlsx

我想通过按 DESC 顺序对月份和年份字段进行排序来检索此表,如下所示。我怎样才能做到这一点?我应该更改月份和年份字段的数据类型吗?请帮忙..

    2013 Jan  :  2013Jan_Report.xlsx
    2012 Oct  :  2012Oct_Report.xlsx
    2012 Sep  :  2012Sep_Report.xlsx
    2011 Mar  :  monthly report180413.xlsx

我使用的sql查询如下。它按 DESC 顺序检索年份和月份,但月份按字母的 DESC 顺序排序,即“Jan”高于“Feb”。我需要的是'二月'高于'一月'..

 "SELECT * FROM main_reports ORDER BY year DESC, month DESC";

请任何帮助..提前谢谢..

4

3 回答 3

7

假设您使用的是 MySQL。尝试使用方便的 ORDER BY FIELD 选项:

ORDER BY year DESC, FIELD( month, 'Dec', 'Nov', 'Oct', 'Sep', 'Aug', 'Jul', 'Jun', 'May', 'Apr', 'Mar', 'Feb', 'Jan' )
于 2013-04-22T13:28:36.337 回答
3

对于按顺序排序月份,我总是发现最好将它们存储为整数值,然后通过 PHP 输出文本版本

如果您目前将月份存储为一月、二月、三月等,则如果不先转换就无法正确订购

例如,将数据库中的所有月份转换为 Jan=1、Feb=2、Mar=3 等,然后您可以使用 SQL 顺序

ORDER BY year DESC,month DESC

然后在你的PHP中,你可以输出当月的文本版本

$monthName = date("F", mktime(0, 0, 0, $monthNumber));
echo $monthName;
于 2013-04-22T13:07:15.127 回答
1

正如完全烘焙所指出的那样,您严重滥用了 MySQL 数据类型。使用日期或日期时间列来处理与日期相关的数据,或者更好地使用 int(11) 来存储 UNIX 时间戳以便于排序/日期范围选择。

您可以轻松编写 PHP/ASP 脚本来将当前表格布局转换为有效格式。

于 2013-04-22T13:14:23.850 回答