Как отсортировать поля года и месяца в одной строке таблицы 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, чтобы преобразовать текущий формат таблицы в правильный формат.