Ora l'errore è che restituisce sempre 1 o 2

SELECT IF(COUNT(c.cat_order), (c.cat_order + 1), 1) FROM categories c ORDER BY c.cat_order DESC LIMIT 1

se modifico con

SELECT IF(c.cat_order, (c.cat_order + 1), 1) FROM categories c ORDER BY c.cat_order DESC LIMIT 1

funziona correttamente, ma in questo caso non mi funziona quando non esistono categorie e non posso selezionare c.cat_order