Попробуйте:
SELECT * FROM (SELECT pm.ID as prefixID, * FROM prefix_messages as pm
INNER JOIN users as u
ON pm.User_id = u.UserId
WHERE pm.category_id=4
ORDER BY pm.id DESC LIMIT 30)
ORDER BY prefixID ASC
Я предполагаю, что вы делаете только отбор, потому что вы хотите изменить порядок после получения 30 лучших?