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();
Share:
16,775
jrgilman
Author by

jrgilman

Updated on June 25, 2022

Comments

  • jrgilman
    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
    jrgilman over 8 years
    That seems to have been it. I wonder why this works and the other doesn't.
  • dino
    dino over 8 years
    I 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
    dino over 8 years
    Also 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
    jrgilman over 8 years
    I 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.