Limit kisminda sorun yasiyorsunuz.

SELECT * FROM
(SELECT * FROM haberler WHERE onay = 1 AND yer = 1 LIMIT 7,5
UNION SELECT * FROM haberler WHERE onay = 1 or yer = 0 or yer = 2 or yer = 3 ) a ORDER BY id DESC ;

7,5 demek ilk 7 kayittan sonraki 5 taneyi al demek. Sizin ilk sorguda atiyorum limit 10 dediyseniz bunda da 10, 100000 gibi bir sey demeniz gerekir. Ilk sayi gormezden gelecegi stirlari belirtir ikinci sayi ise kac tane cekecegini. Yani bu sekilde ilk 10 dan sonrakileri cek demis olursunuz.