I know there are similiar questions on SO, but unfortunately I haven't found the answer to mine, so asking here.
My result table structure looks like this:
id    item_id   price    group
-------------------------------
1     3472      NULL      
2     234       300      1
3     4872      150      1
4     1109      100
5     5582      300      0
6     144       150      2
7     1384      NULL     1
8     627       100      2
price column can have NULLs and group column can have empty results.
The table is sortable by price.
What I need is:
Order the result set by two columns - price and group
Results with the same price have to be ordererd according to their
groups first (ascending), results with the same price but without group go after them.
NULLs always have to be last regardless of price sort order (DESC
or ASC).
So, the table with ordering should look like this:
id    item_id   price    group
-------------------------------
8     627       100      2
4     1109      100
3     4872      150      1
6     144       150      2
5     5582      300      0
2     234       300      1
7     1384      NULL     1
1     3472      NULL      
When I need to order with NULLs last I use something like:
ORDER BY ISNULL(column), column
And ordering by multiple columns usually is not a problem, but I just stuck with this one. I've spent a few hours with no results.
ORDER BY IF( ISNULL( price ), 1, 0 ), price, IF( group='', 1, 0 ), group ASC
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With