Laravel 5.1 - Order by two columns not working as intended
16,775
I think you have to use the quarter_year
first, like this:
$last_figures = QuarterData::where('company_id', '=', $company->id)
->orderBy('quarter_year')->orderBy('quarter_number')->get();
Author by
jrgilman
Updated on June 25, 2022Comments
-
jrgilman almost 2 years
I have two columns, quarter_number and quarter_year. The quarter_number column stores a value between 1 and 4, while quarter_year stores a year value. I want the data to be sorted like so for example:
ex: (quarter_number - quarter_year) 4 - 2015 3 - 2015 2 - 2015 1 - 2015 4 - 2014 3 - 2014 etc...
Thus it seemed like this statement would work:
$last_figures = QuarterData::where('company_id', '=', $company->id) ->orderBy('quarter_number')->orderBy('quarter_year')->get();
Unfortunately, it doesn't seem to work as intended (which I thought would be similar to a radix sort). It ends up just sorting by the year (or whatever to last orderBy statement is). Do I have to just program my own custom radix sort for this? Or is there a better way?
Thank you.
-
jrgilman over 8 yearsThat seems to have been it. I wonder why this works and the other doesn't.
-
dino over 8 yearsI think what you actually want is -
$last_figures = QuarterData::where('company_id', '=', $company->id) ->orderBy('quarter_year', 'desc')->orderBy('quarter_number', 'desc)->get();
which will order your data in reverse i.e. 2015,2014,2013,etc. -
dino over 8 yearsAlso you need to order by
quarter_year
first so that you get the grouping that you require, i.e. order by the year first and then by the quarter to get the quarter numbers grouped by year. -
jrgilman over 8 yearsI want it to order from oldest to newest, but yes that would work too. My original post makes it look like I want it DESC though.