mysql order by int as boolean (true false)
В примере нужно сортировать позиции каталога по наименованию, но вначале товары в наличии — остаток которых больше 0.
SELECT * FROM `catalog` WHERE `hide`='0' ORDER BY IF(`ost`,TRUE,FALSE) DESC, `name` ASC;
upd:
замечено что позиции с остатком меньше 0 все равно попадают в начало списка.
Другой вариант:
SELECT * FROM `catalog` WHERE `hide`='0' ORDER BY `ost`>0 DESC, `name` ASC;