Du bør vende det om:
SELECT * FROM infos WHERE category=...
ORDER BY rate DESC, like DESC, RAND();
På den måde sorterer den efter rate, så like og til sidst tilfældig hvis rate og like er ens.
Din oprindelige ORDER BY med RAND() virker heller ikke, fordi du bruger to ORDER BY-klausuler.