I have a table like:
+------+---------+- | id | parent | +------+---------+ | 2043 | NULL | | 2044 | 2043 | | 2045 | 2043 | | 2049 | 2043 | |
If your table uses 0 instead of null to indicate an entry with no parent:
0
null
id | parent ------------- 1233 | 0 1234 | 1233 1235 | 0 1236 | 1233 1237 | 1235
Use greatest instead of coalesce and check the value does not equal 0:
greatest
coalesce
ORDER BY GREATEST(parent, id), parent != 0, id