SELECT SQL_CALC_FOUND_ROWS a.id, a.title, a.url, a.image, a.promo FROM ads AS a WHERE a.categoryId=:catId ORDER BY a.promo DESC, a.dateCreate DESC LIMIT 0, 10
SELECT SQL_CALC_FOUND_ROWS a.id, a.title, a.url, a.image, a.promo FROM ads AS a WHERE a.categoryId=:catId ORDER BY a.promo DESC, a.dateCreate DESC LIMIT 0, 10
Powinno Ci zwrócić w pierwszej kolejności jedynie te reklamy, które są obecnie promowane. Dalszego sortowania w ramach jednej i drugiej grupy nie ma - jeśli potrzebujesz dodaj sobie kolejną regułę po przecinku
[...] ORDER BY a.promo = 1 AND NOW() BETWEEN a.promoDateStart AND a.promoDateEnd DESC [...]