Du bör vända på det:
SELECT * FROM infos WHERE category=...
ORDER BY rate DESC, like DESC, RAND();
På så sätt sorteras den efter frekvens, sedan gilla och slutligen slumpmässig om frekvens och like är lika.
Din ursprungliga ORDER BY med RAND() fungerar inte heller eftersom du använder två ORDER BY-satser.