Il problema è con la priorità di OR
/AND
condizioni. AND
ha una priorità maggiore di OR
, ecco perché valuta innanzitutto tutte le condizioni connesse da AND
(tag-merch, newsID-2134 e status-1) e quindi valuta sia i tag-gda che i tag-contest).
Prova ad aggiungere le parentesi:
SELECT *
FROM `posts`
WHERE (`tags` LIKE '%gda%'
OR `tags` LIKE '%contests%'
OR `tags` LIKE '%merch%')
AND `newsID` != '2134'
AND `status` > '1'
ORDER BY `postDate` DESC
LIMIT 5