Una volta che l'ordinamento e' casuale... l'ordinamento e' casuale. Tu devi PRIMA estrarre i 20 record col valore piu' alto e poi mescolarli.
query scritta al volo non testatacodice:SELECT * FROM ( SELECT c_art_articolo.*, c_art_categoria.* FROM c_art_articolo INNER JOIN c_art_categoria ON c_art_articolo.id_art_categoria = c_art_categoria.id_art_categoria WHERE c_art_articolo.data_ins_adm >= '$range' ORDER BY c_art_articolo.contatore DESC LIMIT 20 ) top20 ORDER BY RAND()