I have \"tasks\" table with 3 fields:
What I am trying to achieve is with the whole table sorted
Taken from Alex Martelli just shortened a bit with IF() and fixed the ASC/DESC ordering
SELECT * FROM tab
ORDER BY done ASC, IF(done, to_days(thedate), prio) DESC;
You could try ORDER BY (done asc, aux desc)
where aux is computed with a CASE
to yield either priority or date based on the value of done
(you may have to cast them to the same type to fit in the same expression, e.g. cast the date to a suitable integer day number).
For example:
SELECT * FROM tab
ORDER BY done desc,
case done
when 0 then prio
else to_days(thedate)
end desc;