Ik ken code-igniter niet, maar in principe wil je dat het eerst de unie doet en vervolgens de volgorde over de hele set toepast. Dit zou een subquery vereisen. Het zou moeten resulteren in de volgende SQL-query:
select * from
((SELECT * FROM media m INNER JOIN category c ON m.category_id = c.id )
UNION ALL
(SELECT * FROM media m INNER JOIN category c ON m.category_id = c.id)) T
ORDER BY m.media_files DESC LIMIT 3
Ik hoop dat het je wat helpt.