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