I have a table which looks like this:
| Name | AltName |
|---|---|
| Sam | null |
| Ann | null |
| null | Mark |
| John | null |
| null | Bart |
| Sasha | null |
I want to order by both Name and AltName. If I do this:
Table::orderBy('Name')->orderBy('AltName')->get();
This will return the data in this order:
Ann, John, Sam, Sasha, Bart, Mark
I don’t want it to group the data but instead merge it like this: Ann, Bart, John, Mark, Sam, Sasha
How can I achieve this using Laravel eloquent or raw SQL query?
Advertisement
Answer
What you probably want here is a COALESCE of some sort, if you want to do it in SQL.
This should do the trick;
Table::orderByRaw('COALESCE(Name,AltName)')->get();
It shouldn’t matter which way around you put Name and AltName given that your data shows one is always NULL if the other value is present.