Using:
SELECT a.id, a.region FROM ads a RIGHT JOIN (SELECT t.*, CASE WHEN @region = t.region THEN @rownum := @rownum + 1 ELSE @rownum := 1 END as rank, @region := t.region FROM ADS t JOIN (SELECT @rownum := 0, @region := 1) r ORDER BY t.region) b ON b.id = a.id AND b.region = a.region AND b.rank <= 4
source share