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' の上に来ます。私が必要としているのは、「1 月」の上の「2 月」です。

 "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 に答える
1

fullbaked でいくらか指摘されたように、MySQL データ型を深刻に誤用しています。日付関連のデータを処理するために日付列または日時列を使用するか、UNIX タイムスタンプを格納するために int(11) を使用して、順序付けや日付範囲の選択を容易にします。

現在のテーブル レイアウトを有効な形式に変換する PHP/ASP スクリプトを簡単に作成できます。

于 2013-04-22T13:14:23.850 に答える