Как отсортировать поля года и месяца в одной строке таблицы mysql с помощью php

У меня есть таблица 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";

Любая помощь, пожалуйста.. Спасибо заранее..

3 ответа

Решение

Предполагая, что вы используете MySQL. Попробуйте использовать удобную опцию ORDER BY FIELD:

ORDER BY year DESC, FIELD( month, 'Dec', 'Nov', 'Oct', 'Sep', 'Aug', 'Jul', 'Jun', 'May', 'Apr', 'Mar', 'Feb', 'Jan' )

Чтобы отсортировать месяцы по порядку, всегда лучше хранить их как целочисленные значения, а затем выводить текстовую версию через PHP.

Если у вас в настоящее время хранятся месяцы как январь, февраль, мар и т. Д., Будет невозможно правильно оформить заказ без предварительной конвертации

Например, конвертируйте все месяцы в вашей базе данных в январь =1, февраль =2, март =3 и т. Д., Затем вы можете использовать порядок SQL:

ORDER BY year DESC,month DESC

тогда в вашем PHP вы можете вывести текстовую версию месяца с помощью

$monthName = date("F", mktime(0, 0, 0, $monthNumber));
echo $monthName;

Как уже указывал полностью испеченный, вы серьезно злоупотребляете типами данных MySQL. Либо используйте столбцы даты или даты / времени для обработки данных, связанных с датой, либо, что еще лучше, используйте int(11) для хранения меток времени UNIX для удобного упорядочивания / выбора диапазона дат.

Вы можете легко написать скрипт PHP/ASP, чтобы преобразовать текущий формат таблицы в правильный формат.

Другие вопросы по тегам