Ik denk dat je iets in deze algemene lijnen nodig hebt. Ik heb het iets anders gedaan dan je vraag. In plaats van de top 10 te halen en vervolgens records te verwijderen. Het krijgt de top 10 records die niet verborgen zouden blijven.
SELECT c.ID, c.fromuserid, c.roomid, c.text, u.nickname
FROM chats c
JOIN user u ON c.fromuserid = u.id
where c.roomid = 3 AND user.banned = 0
AND NOT EXISTS(
SELECT * FROM hide h
WHERE h.hideuser = c.fromuserid
AND orguser = $userid)
ORDER BY c.ID DESC
LIMIT 0,10